printf多级别、带颜色打印输出
个人主页:董哥聊技术 我是董哥,嵌入式领域新星创作者 创作理念:专注分享高质量嵌入式文章,让大家读有所得!
文章目录
- 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多级别、带颜色打印输出相关推荐
- printf打印是字体和背景带颜色的输出的方法
格式如下: printf("\033[字背景颜色;字体颜色m 字符串 \033[0m" ); 例子: printf("\033[1m\033[45;33m HELLO_W ...
- 花里胡哨,如何在Linux终端输出带有颜色的字体,将带颜色的字体赋值给变量...
背景 在日常操作Linux的情况下,总会遇到一些需求,比如说,把输出的内容用不同颜色标注出来,以达到醒目.提示的目的,那么如何在Linux终端输出带有颜色的字体呢? Linux终端输出字符颜色 ...
- 用C语言Linux下打印带颜色的字符串
用C语言Linux下打印带颜色的字符串 字背景颜色范围:40----49 40:黑 41:深红 42:绿 43:黄色 44:蓝色 45:紫色 46:深绿 47:白色 字颜色:30---------- ...
- shell脚本中echo显示内容带颜色
shell脚本中echo显示内容带颜色显示,echo显示带颜色,需要使用参数-e 格式如下: echo -e "\033[字背景颜色:文字颜色m字符串\033[0m" 例如: e ...
- shell脚本中echo显示内容带颜色的实现方法
shell脚本中echo显示内容带颜色显示,echo显示带颜色,需要使用参数-e 格式如下: 复制代码 代码如下: echo -e "\033[字背景颜色:文字颜色m字符串\033[0m&q ...
- 诛仙服务器显示横线,诛仙手游聊天颜色字体代码发送带颜色的字
诛仙手游聊天颜色字体代码发送带颜色的字,玩家们在游戏中聊天看到很多玩家都用带颜色字体聊天,这不是VIP特权是玩家用颜色代码聊天发送,输入喜欢颜色代码加上聊天内容就可以发送了.世界上突然出现了一堆五颜六 ...
- python面向对象三大特性、类的约束、print带颜色输出及super补充
面向对象三大特性.类的约束.print带颜色输出及super补充 简述: python面向对象的三大特性: 1.继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类,父类又可称为 ...
- 设置 shell 脚本中 echo 显示内容带颜色
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. shell脚本中echo显示内容带颜色显示,echo显示带颜色,需要使用参数 -e 格式如下: e ...
- 如何解决linux标准输出中带颜色的字符
带颜色的字符本身的编码是包含颜色码的,这一点往往不会有太多的影响,可一旦被他影响了,那就是掉入了一个大坑里. 所幸的是sed可以用来去除字符中的颜色代码 sed remove color codes ...
最新文章
- $digest already in progress 解决办法——续
- Windows Phone 7“芒果”更新带来浏览器重大升级:IE Mobile 9
- 【传智播客】Javaweb程序设计任务教程 黑马程序员 第五章 课后答案
- 用ASP.NET Core 2.1 建立规范的 REST API -- 保护API和其它
- 【机器视觉学习笔记】OpenCV C++ 调用笔记本摄像头
- java common-lang_common-lang3工具类-使用手册
- 6.7开启Consul使用
- MyBatis源码阅读(一) --- 源码阅读环境搭建
- uipath数据爬取(结构化数据)
- 伺服速度控制模式接线图_PLC采用转矩、位置、速度模式控制伺服电机的方法
- java 异或代码编程
- nvidia-smi 在 MIG M. 出现 Disabled
- BZOJ 2101: [Usaco2010 Dec]Treasure Chest 藏宝箱(这是我写过最骚气的dp!)
- php提取bing背景,使用PHP获取必应Bing每日图片
- 在豌豆荚安卓市场下载了伪造的ES文件管理器,该流氓apk会自动的下载手机游戏
- 【winPE系统下如何安装游戏手柄】
- NG_ML_Cousera_Summary
- win10更改用户账户控制设置方法
- 一切皆socket!网络编程:三次握手 四次握手 与socket函数的关系
- 软件设计师:计算机硬件基础