printf("\033[46;31m[%s:%d]\033[0m "#fmt" errno=%d, %m\r\n", __func__, __LINE__, ##args, errno, errno);
上面printf时在Linux命令行下打印出带颜色的字体,方便一眼区分不同种类的调试信息,只需要加上一些颜色代码,例如:这里的46代表底色, 31代表字体的颜色。
使用ascii code 是对颜色调用的始末格式如下:
\033[ ; m …… \033[0m
后面哪个 ”\033[0m” 是对前面哪个颜色载入的结束,恢复到终端原来的背景色和字体色,可以把后面哪个修改成如下试试:
#define DEBUG_ERR(fmt, args...) printf("\033[46;31m[%s:%d]\033[40;37m "#fmt" errno=%d, %m\r\n", __func__, __LINE__, ##args, errno, errno);
下面列出ascii code 的颜色值:
字背景颜色范围:40----49 字颜色:30-----------39
40:黑30:黑
41:深红31:红
42:绿32:绿
43:黄色33:黄
44:蓝色34:蓝色
45:紫色35:紫色
46:深绿36:深绿
47:白色37:白色
记忆颜色格式太麻烦了,我们将它搞成宏定义吧,这样以后用起来就方便得多。
#define NONE "\e[0m"
#define BLACK "\e[0;30m"
#define L_BLACK "\e[1;30m"
#define RED "\e[0;31m"
#define L_RED "\e[1;31m"
#define GREEN "\e[0;32m"
#define L_GREEN "\e[1;32m"
#define BROWN "\e[0;33m"
#define YELLOW "\e[1;33m"
#define BLUE "\e[0;34m"
#define L_BLUE "\e[1;34m"
#define PURPLE "\e[0;35m"
#define L_PURPLE "\e[1;35m"
#define CYAN "\e[0;36m"
#define L_CYAN "\e[1;36m"
#define GRAY "\e[0;37m"
#define WHITE "\e[1;37m"
#define BOLD "\e[1m"
#define UNDERLINE "\e[4m"
#define BLINK "\e[5m"
#define REVERSE "\e[7m"
#define HIDE "\e[8m"
#define CLEAR "\e[2J"
#define CLRLINE "\r\e[K" //or "\e[1K\r"
#define DEBUG_ERROR(fmt, args...) do{ \printf(RED"[%s]:"NONE, __FUNCTION__); \
printf(fmt, ##args); \
}while(0);
效果:
所以,我建议将fatal一类致命错误级别的log用高亮颜色标注,一旦有这类错误发生我们也能第一时间察觉。