From d6a27f15acd08e99841595cece2b3e3e8045491a Mon Sep 17 00:00:00 2001 From: wangzhengquan <wangzhengquan85@126.com> Date: 星期二, 13 十月 2020 18:15:55 +0800 Subject: [PATCH] update --- include/usgcommon/logger.h | 86 ++++++++++++++++++++++++++++-------------- 1 files changed, 57 insertions(+), 29 deletions(-) diff --git a/include/usgcommon/logger.h b/include/usgcommon/logger.h index 4afb855..a735086 100644 --- a/include/usgcommon/logger.h +++ b/include/usgcommon/logger.h @@ -4,41 +4,69 @@ #include "usg_common.h" #include "usg_typedef.h" +struct LoggerConfig { + std::string logFile; + int level; + bool console; +}; + class Logger { - std::string configFile; - int level; +private: + std::string configFile; + LoggerConfig config; + FILE *logFile; - void dolog(const char *fmt, va_list ap) - { - char buf[MAXBUF]; - vsnprintf(buf, MAXBUF-1, fmt, ap); - strcat(buf, "\n"); - fflush(stdout); /* in case stdout and stderr are the same */ - fputs(buf, stdout); - fflush(NULL); /* flushes all stdio output streams */ - } + void dolog(const char *fmt, va_list ap, int level, int err = 0) { + char buf[MAXBUF]; + + struct timeval tv; + struct tm *info; + gettimeofday(&tv, NULL); + info = localtime(&tv.tv_sec); + strftime(buf, MAXBUF - 1, "%Y-%d-%m %H:%M:%S", info); + snprintf(buf + strlen(buf), MAXBUF - strlen(buf) - 1, ",%ld [%s] ", tv.tv_usec, strlevel(level)); + vsnprintf(buf + strlen(buf), MAXBUF - strlen(buf) - 1, fmt, ap); + + if (err != 0) { + snprintf(buf + strlen(buf), MAXBUF - strlen(buf) - 1, ": %s", strerror(err)); + } + strcat(buf, "\n"); + fflush(stdout); /* in case stdout and stderr are the same */ + + if(logFile != NULL) { + fputs(buf, logFile); + } + if(config.console) { + fputs(buf, stdout); + } + + fflush(NULL); /* flushes all stdio output streams */ + } + void init(); + +private: + static const char *LOGGER_LEVEL_STR[] ; public: - enum { - ALL , - DEBUG , - INFO , - WARN , - ERROR , - FATAL , - OFF - }; + enum LoggerLevel { ALL, DEBUG, INFO, WARN, ERROR, FATAL, OFF }; - Logger(int l = INFO): level(l) {} - Logger(std::string cf); - - void log(int _level, const char *fmt, ...); + Logger(int l = INFO); + Logger(std::string cf); + Logger(LoggerConfig & conf); - void debug(const char *fmt, ...); - void info(const char *fmt, ...); - void warn(const char *fmt, ...); - void error(const char *fmt, ...); - void fatal(const char *fmt, ...); + ~Logger(); + + void log(int _level, const char *fmt, ...); + + void debug(const char *fmt, ...); + void info(const char *fmt, ...); + void warn(const char *fmt, ...); + void error(const char *fmt, ...); + void error(int err, const char *fmt, ...); + void fatal(const char *fmt, ...); + + + static const char * strlevel(int level); }; #endif \ No newline at end of file -- Gitblit v1.8.0