printf多级别、带颜色打印输出_printf打印颜色,零基础如何成为高级物联网嵌入式开发开发

97 阅读3分钟

我是董哥,嵌入式领域新星创作者

创作理念:专注分享高质量嵌入式文章,让大家读有所得!

img

文章目录

哈喽,伙计们!

最近做了一些Linux应用开发方面的东西,感觉现在有点混乱,所以想将每个知识点模块化,并且能够搭建自己的API库,方便以后能够直接使用!

今天主要来讨论一下我们最常用的打印字符串,如果实现调试打印和颜色打印。

 

1、明确需求

Linux开发环境下,我们日常使用的打印字符串的主要需求可能有两种:

  • 多级别打印:我们调试打印信息可以分为多个级别,全局设置打印级别,来实现打印的全局管理!
  • 多颜色打印:不同的打印级别对应不同的打印色彩,方便快速吸引开发者的注意力,快速定位问题!

基于以上两个基本需求,我们来进行简单封装。

 

2、打印级别分类

打印级别参考内核的分类,设置级别如下:

typedef enum {
  LOG_EMERG=0, /\*\*< Emergency \*/
  LOG_ALERT,   /\*\*< Alert \*/
  LOG_CRIT,    /\*\*< Critical \*/
  LOG_ERR,     /\*\*< Error \*/
  LOG_WARNING, /\*\*< Warning \*/
  LOG_NOTICE,  /\*\*< Notice \*/
  LOG_INFO,    /\*\*< Information \*/
  LOG_DEBUG    /\*\*< Debug \*/
}GLOBAL_LOG_LEVEL;

 

3、打印级别控制

打印级别分类后,我们定义全局变量,来全局控制打印级别。

GLOBAL_LOG_LEVEL g_log_level = LOG_INFO;        // default log level

/\*\*
 \* @brief 设置LOG打印等级
 \* 
 \* @param log\_level 
 \*/

void Set\_Log\_Lever(GLOBAL_LOG_LEVEL log_level) {

    g_log_level = log_level;

}

如果需要全局调整打印级别,我们可以调用Set_Log_Lever的接口,实现打印级别的适时调整。

 

4、打印信息添加

在输出我们正常打印信息之前,我们也需要添加一些时间信息,打印级别信息等。

    const char global_log_level_string[8][10] = {"EMERG", "ALERT", "CRIT", "ERR", "WARNING", "NOTICE", "INFO", "DEBUG"};
	static char str_tmp[512];

	// 增加时间信息
    time\_t now;
    time(&now);
    strftime(str_tmp, sizeof(str_tmp), "[%Y-%m-%d %H:%M:%S ", localtime(&now));

    //加入LOG后缀信息
    strcat(str_tmp,global_log_level_string[level]);
    strcat(str_tmp, "] ");

通过以上代码,将时间和打印级别信息都添加到字符串之前。

输出效果如下

[2022-10-21 09:13:54 INFO] log info output

 

5、颜色定义

颜色控制如何做?

很简单,在输出字符串前,符合特定的颜色控制格式,就可以更改打印颜色了。

printf("\033[显示方式;字背景颜色;字体颜色m…\033[0m")

控制命令以\033[开头,以m结尾,而中间则是属性码,属性代码之间使用;分隔,如\033[1;34;42m,最后以默认颜色\033[0m结尾,以避免影响后面正常打印!

显示方式

意义显示方式
默认0
高亮显示1
下划线4
闪烁5
反白显示7
不可见8

 

前景颜色和背景颜色

颜色前景色背景色
黑色3040
红色3141
绿色3242
黄色3343
蓝色3444
紫红色3545
青蓝色3646
白色3747

没有设置的话就是默认

 

颜色定义

下方定义一些常用颜色,方便打印调用。

#define LOG_CLRSTR_NONE         "\033[0m"               // 默认显示
#define LOG_CLRSTR_RED          "\033[0;42;31m"         // 绿红色
#define LOG_CLRSTR_GREEN        "\033[0;32m"         	// 绿色
#define LOG_CLRSTR_BLUE         "\033[0;32;34m"         // 蓝色
#define LOG_CLRSTR_DARK_GRAY    "\033[1;30m"            // 灰色
#define LOG_CLRSTR_CYAN         "\033[0;36m"            // 青色
#define LOG_CLRSTR_PURPLE       "\033[0;35m"            // 紫色
#define LOG_CLRSTR_BROWN        "\033[0;33m"            // 棕色
#define LOG_CLRSTR_YELLOW       "\033[5;42;33m"         // 绿黄色
#define LOG_CLRSTR_WHITE        "\033[1;37m"            // 白色

 

6、颜色控制

定义完各类颜色后,我们要做的就是对于不同级别的打印,选择不同的颜色!

//LOG类型判断,选择不同打印颜色
    switch (level)
    {
    case LOG_EMERG:
        log_color = LOG_CLRSTR_RED;
        break;


**收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。**
![img](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/05e6984ca79741ecab544023b077422e~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1771251577&x-signature=GBF%2BWWz2d4EtUNPqgf%2B5ycQRmX4%3D)
![img](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/76f8bee5b553415ebd8ffab62b500678~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1771251577&x-signature=e%2FNzXUPgPFaV0wUF6Yv7O%2FV9V40%3D)

**[如果你需要这些资料,可以戳这里获取](https://gitee.com/vip204888)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人**

**都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**