个人主页:董哥聊技术 我是董哥,嵌入式领域新星创作者 创作理念:专注分享高质量嵌入式文章,让大家读有所得!

文章目录

  • 1、明确需求
  • 2、打印级别分类
  • 3、打印级别控制
  • 4、打印信息添加
  • 5、颜色定义
  • 6、颜色控制
  • 7、颜色打印
  • 8、打印预览
  • 9、Demo获取

哈喽,伙计们!

最近做了一些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

前景颜色和背景颜色

颜色 前景色 背景色
黑色 30 40
红色 31 41
绿色 32 42
黄色 33 43
蓝色 34 44
紫红色 35 45
青蓝色 36 46
白色 37 47

没有设置的话就是默认

颜色定义

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

#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;case LOG_ALERT:log_color = LOG_CLRSTR_BLUE;break;case LOG_CRIT:log_color = LOG_CLRSTR_CYAN;break;case LOG_ERR:log_color = LOG_CLRSTR_RED;break;case LOG_WARNING:log_color = LOG_CLRSTR_PURPLE;break;case LOG_NOTICE:log_color = LOG_CLRSTR_YELLOW;break;case LOG_INFO:log_color = LOG_CLRSTR_DARK_GRAY;break; case LOG_DEBUG:log_color = LOG_CLRSTR_BROWN;break; default:log_color = LOG_CLRSTR_GREEN;break;}

7、颜色打印

在选择对应颜色之后,我们要做的就是将这些颜色信息,放到正常打印信息的前方。

可以通过字符串拼接的函数实现。

    //  重新设置标准输出sprintf(str_uart, "%s",log_color);strcat(str_uart, str_tmp);...strcat(str_uart,LOG_CLRSTR_NONE);strcat(str_uart, "\r\n");printf("%s",str_uart);

这里的颜色打印,说白了就是在我们要打印的字符串前方,加入打印颜色的信息即可,打印字符串结束之后,要加上\033[0m,来恢复默认!

8、打印预览

设置完成之后,我们看一下打印预览:

9、Demo获取

多级别彩色打印这个功能,已经封装成了一个API,我们直接获取源码,将.c.h文件加入到自己工程即可使用!

源码获取

点赞+关注,永远不迷路

printf多级别、带颜色打印输出相关推荐

  1. printf打印是字体和背景带颜色的输出的方法

    格式如下: printf("\033[字背景颜色;字体颜色m 字符串 \033[0m" ); 例子: printf("\033[1m\033[45;33m HELLO_W ...

  2. 花里胡哨,如何在Linux终端输出带有颜色的字体,将带颜色的字体赋值给变量...

    背景 ​ 在日常操作Linux的情况下,总会遇到一些需求,比如说,把输出的内容用不同颜色标注出来,以达到醒目.提示的目的,那么如何在Linux终端输出带有颜色的字体呢? Linux终端输出字符颜色 ​ ...

  3. 用C语言Linux下打印带颜色的字符串

    用C语言Linux下打印带颜色的字符串 字背景颜色范围:40----49 40:黑 41:深红 42:绿 43:黄色 44:蓝色 45:紫色 46:深绿 47:白色  字颜色:30---------- ...

  4. shell脚本中echo显示内容带颜色

    shell脚本中echo显示内容带颜色显示,echo显示带颜色,需要使用参数-e  格式如下: echo -e "\033[字背景颜色:文字颜色m字符串\033[0m" 例如: e ...

  5. shell脚本中echo显示内容带颜色的实现方法

    shell脚本中echo显示内容带颜色显示,echo显示带颜色,需要使用参数-e 格式如下: 复制代码 代码如下: echo -e "\033[字背景颜色:文字颜色m字符串\033[0m&q ...

  6. 诛仙服务器显示横线,诛仙手游聊天颜色字体代码发送带颜色的字

    诛仙手游聊天颜色字体代码发送带颜色的字,玩家们在游戏中聊天看到很多玩家都用带颜色字体聊天,这不是VIP特权是玩家用颜色代码聊天发送,输入喜欢颜色代码加上聊天内容就可以发送了.世界上突然出现了一堆五颜六 ...

  7. python面向对象三大特性、类的约束、print带颜色输出及super补充

    面向对象三大特性.类的约束.print带颜色输出及super补充 简述: python面向对象的三大特性: 1.继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类,父类又可称为 ...

  8. 设置 shell 脚本中 echo 显示内容带颜色

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. shell脚本中echo显示内容带颜色显示,echo显示带颜色,需要使用参数 -e  格式如下: e ...

  9. 如何解决linux标准输出中带颜色的字符

    带颜色的字符本身的编码是包含颜色码的,这一点往往不会有太多的影响,可一旦被他影响了,那就是掉入了一个大坑里. 所幸的是sed可以用来去除字符中的颜色代码 sed remove color codes ...

最新文章

  1. $digest already in progress 解决办法——续
  2. Windows Phone 7“芒果”更新带来浏览器重大升级:IE Mobile 9
  3. 【传智播客】Javaweb程序设计任务教程 黑马程序员 第五章 课后答案
  4. 用ASP.NET Core 2.1 建立规范的 REST API -- 保护API和其它
  5. 【机器视觉学习笔记】OpenCV C++ 调用笔记本摄像头
  6. java common-lang_common-lang3工具类-使用手册
  7. 6.7开启Consul使用
  8. MyBatis源码阅读(一) --- 源码阅读环境搭建
  9. uipath数据爬取(结构化数据)
  10. 伺服速度控制模式接线图_PLC采用转矩、位置、速度模式控制伺服电机的方法
  11. java 异或代码编程
  12. nvidia-smi 在 MIG M. 出现 Disabled
  13. BZOJ 2101: [Usaco2010 Dec]Treasure Chest 藏宝箱(这是我写过最骚气的dp!)
  14. php提取bing背景,使用PHP获取必应Bing每日图片
  15. 在豌豆荚安卓市场下载了伪造的ES文件管理器,该流氓apk会自动的下载手机游戏
  16. 【winPE系统下如何安装游戏手柄】
  17. NG_ML_Cousera_Summary
  18. win10更改用户账户控制设置方法
  19. 一切皆socket!网络编程:三次握手 四次握手 与socket函数的关系
  20. 软件设计师:计算机硬件基础

热门文章

  1. psycopg2笔记
  2. fatal: Not possible to fast-forward, aborting.
  3. Gradle使用技巧
  4. 结合平时的使用经历,说说Edge浏览器的使用体验及优缺点
  5. 如何在Android平台实现低延迟的RTMP/RTSP录屏直播
  6. WIN10微软账号登录一直转圈的解决方法
  7. Excel VBA中判断word文件是否打开,未打开则打开该文件
  8. 基于阿里巴巴EasyExcel实现对复杂Excel模板的填充
  9. 如何智能秒回女朋友| 微信自动回复
  10. 用jquery实现换肤的效果