From aa2f3b2a9968bb4928463bdae05fb026d16b60bb Mon Sep 17 00:00:00 2001 From: wangzhengquan <wangzhengquan85@126.com> Date: 星期五, 04 十二月 2020 19:07:01 +0800 Subject: [PATCH] 固定bus key --- include/usgcommon/logger.h | 88 +++++++++++++++++++++++++++++-------------- 1 files changed, 59 insertions(+), 29 deletions(-) diff --git a/include/usgcommon/logger.h b/include/usgcommon/logger.h index 00bc7de..cf0d2ba 100644 --- a/include/usgcommon/logger.h +++ b/include/usgcommon/logger.h @@ -4,41 +4,71 @@ #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, stderr); - fflush(NULL); /* flushes all stdio output streams */ - } + void dolog(const char *fmt, va_list ap, int level, int err = 0) { + char buf[MAXLINE]; + + 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