From 75b92a1795415e03113c5b11654144d18a1086ec Mon Sep 17 00:00:00 2001 From: open-license-manager <rillf@maildrop.cc> Date: 周一, 08 9月 2014 05:56:38 +0800 Subject: [PATCH] logging --- src/library/base/logger.c | 70 +++++++++++++++++++++++++++++++++++ src/library/base/CMakeLists.txt | 1 src/library/base/logger.h | 21 ++++++++++ 3 files changed, 92 insertions(+), 0 deletions(-) diff --git a/src/library/base/CMakeLists.txt b/src/library/base/CMakeLists.txt index 4de3733..700c851 100644 --- a/src/library/base/CMakeLists.txt +++ b/src/library/base/CMakeLists.txt @@ -1,6 +1,7 @@ ADD_LIBRARY(base STATIC EventRegistry.cpp StringUtils.cpp + logger.c ) add_dependencies( base public_key ) \ No newline at end of file diff --git a/src/library/base/logger.c b/src/library/base/logger.c new file mode 100644 index 0000000..4ee8354 --- /dev/null +++ b/src/library/base/logger.c @@ -0,0 +1,70 @@ +#include "logger.h" +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <stdarg.h> +#include <time.h> +#include <unistd.h> +#ifdef __unix__ +#define MAX_PATH 255 +#else +#include <windows.h> +#endif + +static FILE *logFile = NULL; + +static void timenow(char * buffer) { + time_t rawtime; + struct tm *timeinfo; + + time(&rawtime); + timeinfo = localtime(&rawtime); + + strftime(buffer, 64, "%Y-%m-%d %H:%M:%S", timeinfo); +} + +static void getLogFname(char* logpath) { +#ifdef __unix__ + char const *folder = getenv("TMPDIR"); + if (folder == 0) { + folder = "/tmp"; + } + strcpy(logpath, folder); + strcat(logpath, "/open-license.log"); +#else + int plen=GetTempPath(MAX_PATH,logpath); + if(plen == 0) { + fprintf(stderr, "Error getting temporary directory path"); + } + strcat(logpath,"open-license.log"); +#endif +} + +void _log(char* format, ...) { + char logpath[MAX_PATH]; + va_list args; + char * buffer; + if (logFile == NULL) { + getLogFname(logpath); + logFile = fopen(logpath, "a"); + if (logFile == NULL) { + //what shall we do here? + return; + } + } + buffer = (char *) malloc(sizeof(char) * strlen(format) + 64); + timenow(buffer); + sprintf(&buffer[strlen(buffer) - 1], "-[%d]-", getpid()); + strcat(buffer, format); + va_start(args, format); + vfprintf(logFile, buffer, args); + va_end(args); + free(buffer); +} + +void _shutdown_log() { + if (logFile != NULL) { + fclose(logFile); + logFile = NULL; + } +} diff --git a/src/library/base/logger.h b/src/library/base/logger.h new file mode 100644 index 0000000..5f10ba6 --- /dev/null +++ b/src/library/base/logger.h @@ -0,0 +1,21 @@ +#ifndef logger_INCLUDED +#define logger_INCLUDED + +#ifndef LOG_ENABLED +#ifdef NDEBUG +#define LOG_DEBUG(M, ...) _log("[INFO] %s (%s:%d) " M "\n", __FILE__, __LINE__, ##__VA_ARGS__) +#endif +#define LOG_INFO(M, ...) _log("[INFO] %s (%s:%d) " M "\n", __FILE__, __LINE__, ##__VA_ARGS__) +#define LOG_WARN(M, ...) _log("[WARN] %s (%s:%d: errno: %s) " M "\n", __FILE__, __LINE__, clean_errno(), ##__VA_ARGS__) +#define LOG_ERROR(M, ...) _log("[ERROR] %s (%s:%d: errno: %s) " M "\n", __FILE__, __LINE__, clean_errno(), ##__VA_ARGS__) + +#else +#define LOG_DEBUG(M,...) +#define LOG_INFO(M, ...) +#define LOG_WARN(M, ...) +#define LOG_ERROR(M, ...) +#endif + +void _log(char* format, ...); +void _shutdown_log(); +#endif -- Gitblit v1.9.1