大家好,我是小麦,这次分享一个小技巧,打印带颜色编码的日志,希望对你有所帮助。
log的重要性
在项目开发中,日志可以帮助我们调试和发现产品中潜藏的问题,比如在发生错误的时候,打印相应的日志,定位发生错误的位置,通常我们需要日志满足以下这些功能:
-
不同的日志级别(
Trace
、Warning
、Info
、Error
、fatal
); - 能够设置日志级别;
- 基于日志级别的颜色编码;
- 占用空间小;
- 可配置,可以完全禁用它;
- 时间戳;
- 易于集成;
下面,我们介绍一下如何在串口上打印出不同颜色的字符串。
打印彩色的log
在Stack Overflow上有人提出过类似的问题,如何在终端打印出彩色的字符?
这里给出了一个很简单的C程序demo
,我测试了一下,确实可以实现。
#include
#defineANSI_COLOR_RED"x1b[31m"
#defineANSI_COLOR_GREEN"x1b[32m"
#defineANSI_COLOR_YELLOW"x1b[33m"
#defineANSI_COLOR_BLUE"x1b[34m"
#defineANSI_COLOR_MAGENTA"x1b[35m"
#defineANSI_COLOR_CYAN"x1b[36m"
#defineANSI_COLOR_RESET"x1b[0m"
intmain(intargc,charconst*argv[]){
printf(ANSI_COLOR_RED"ThistextisRED!"ANSI_COLOR_RESET"
");
printf(ANSI_COLOR_GREEN"ThistextisGREEN!"ANSI_COLOR_RESET"
");
printf(ANSI_COLOR_YELLOW"ThistextisYELLOW!"ANSI_COLOR_RESET"
");
printf(ANSI_COLOR_BLUE"ThistextisBLUE!"ANSI_COLOR_RESET"
");
printf(ANSI_COLOR_MAGENTA"ThistextisMAGENTA!"ANSI_COLOR_RESET"
");
printf(ANSI_COLOR_CYAN"ThistextisCYAN!"ANSI_COLOR_RESET"
");
return0;
}
最终编译之后运行得到的结果如下,发现打印的字符颜色发生了变化。
ANSI转义序列
ANSI转义序列(ANSI escape sequences)是一种带内信号的转义序列标准,用于控制视频文本终端上的光标位置、颜色和其他选项。在文本中嵌入确定的字节序列,大部分以ESC转义字符
和"["字符
开始,终端会把这些字节序列解释为相应的指令,而不是普通的字符编码。
所以,这里我们查了一下ascii
码表,可以发现ESC
的码值是十进制的27
,也就是十六进制的0x1b
,具体如下所示:
所以转义序列的格式如下:
转自wiki
可以参考文档:https://invisible-island.net/xterm/ctlseqs/ctlseqs.html
所以这里简单举个例子,设置不同的背景色:
#include
intmain(){
for(inti=0;i< 256;i++){
printf("x1b[48;5;%dm%03dx1b[0m",i,i);
if(i%10==0){
printf("
");
}
}
return0;
}
重点是这一句:printf("x1b[48;5;%dm %03d x1b[0m", i, i);
简单分析一下:
-
其中
x1b[
是起始指令,后面的48
表示设置背景色,38
是前景色; -
48后面通常会跟一个
;5;
,这个是文档中规定的,第一个%d
,是设置色号,最后以m
结尾;
-
第二个
%03d
是中间需要显示的文本; -
最后以
x1b[0m
结束。
测试系统是Ubuntu 1804
,最终的运行结果如下所示:
单片机中实现
单片机可以将日志通过串口打印出来,这时候需要显示彩色字符,需要一个前提,就是串口终端软件需要支持解析ANSI转义序列。
下面我做了简单的实验,通过STM32的串口,发送相应的字符,然后在PC端使用MobaXterm
软件打开串口并接收数据;因为这个软件是支持ANSI序列的,所以最终可以显示出不同颜色的字符串。具体如下所示:
总结
本文介绍了如何打印彩色字符串,其中简单介绍了ANSI转义序列,并且给出了几个小的实验结果,并在单片机上发送字符串到PC上,使用xterm串口终端,可以正常显示设置前景色的字符串,结果符合预期。
责任编辑:haq
-
单片机
+关注
关注
6037文章
44558浏览量
635245 -
终端
+关注
关注
1文章
1134浏览量
29880 -
日志
+关注
关注
0文章
138浏览量
10642
原文标题:单片机打印日志还能这么玩?一招秀翻~
文章出处:【微信号:gh_c472c2199c88,微信公众号:嵌入式微处理器】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论