From 3865746d3c0db2978134470fde6cfcd734abfef7 Mon Sep 17 00:00:00 2001 From: wangzhengquan <wangzhengquan85@126.com> Date: 星期六, 10 十月 2020 16:42:59 +0800 Subject: [PATCH] update --- include/usgcommon/logger.h | 49 +++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 39 insertions(+), 10 deletions(-) diff --git a/include/usgcommon/logger.h b/include/usgcommon/logger.h index a9e4de4..a735086 100644 --- a/include/usgcommon/logger.h +++ b/include/usgcommon/logger.h @@ -4,32 +4,57 @@ #include "usg_common.h" #include "usg_typedef.h" -class Logger { - std::string configFile; - int level; +struct LoggerConfig { + std::string logFile; + int level; + bool console; +}; - void dolog(const char *fmt, va_list ap) { +class Logger { +private: + std::string configFile; + LoggerConfig config; + FILE *logFile; + + 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, MAXLINE - 1, "%Y-%d-%m %H:%M:%S ", info); - snprintf(buf + strlen(buf), MAXLINE - strlen(buf) - 1, "(%ld) ", tv.tv_sec * 1000000 + tv.tv_usec); + 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); - vsnprintf(buf + strlen(buf), MAXLINE - 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 */ - fputs(buf, stdout); + + 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(int l = INFO); Logger(std::string cf); + Logger(LoggerConfig & conf); + + ~Logger(); void log(int _level, const char *fmt, ...); @@ -37,7 +62,11 @@ 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