给日志信息加色
我们在调测程序的时候,往往会打印许多信息到终端,但信息多了,也会带来不便。
后来在设计日志功能的时候, 往往会把日志信息分级, 通过级别控制开关来
输出某个级别或者某个级别以上的信息来达到筛选日志信息的目的,但很多级别信息
都需要输出的话还是不能解决信息量多, 查找敏感信息不方便的问题。
考虑到Linux终端下是可以通过shell提供的功能来设置输出信息的颜色的,那我们
是不是可以为不同级别的日志信息设置成不同的颜色,比如错误是红色的,警告是黄色的,
岂不是看起来醒目点?
实现起来也是非常容易的, 下面给出了示例代码供参考:
#define RESET_COLOR "\033[0m"
#define MAX_BUF_SIZE 2047
#define LOGFILE stderr
typedef enum{
LOGLVL_ERR,
LOGLVL_WRN,
LOGLVL_NOTE,
LOGLVL_DBG,
LOGLVL_ALL = LOGLVL_DBG,
LOGLVL_DEF = LOGLVL_WRN,
}LogLevel;
static char* _LogColor[] = {
"\x1b[1;31m Error", // 红色加亮 for ERR
"\x1b[1;33m Warning", // 黄色加亮 for WRN
"\x1b[1;32m Note", // 绿色加亮 for NOTE
"\x1b[0;37m Debug", // 白色 for DBG
};
void LogPrint(LogLevel lvl, const char* fmt, ...)
{
va_list ap;
char buf[MAX_BUF_SIZE+1];
int n;
// Add the PID, color and level field
n = snprintf(buf, sizeof(buf), "[%d]: %s", (int)getpid(), _LogColor[lvl]);
va_start(ap, fmt);
n += vsnprintf(&buf[n], sizeof(buf)-n, fmt, ap);
va_end(ap);
// Reset the color */
snprintf(&buf[n], sizeof(buf)-n, "%s", RESET_COLOR);
fprintf(LOGFILE, buf);
fflush(LOGFILE);
}