给日志信息加色

 

给日志信息加色

我们在调测程序的时候,往往会打印许多信息到终端,但信息多了,也会带来不便。
后来在设计日志功能的时候, 往往会把日志信息分级, 通过级别控制开关来
输出某个级别或者某个级别以上的信息来达到筛选日志信息的目的,但很多级别信息
都需要输出的话还是不能解决信息量多, 查找敏感信息不方便的问题。
考虑到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);
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值