哈喽,伙计们!
最近做了一些Linux应用开发方面的东西,感觉现在有点混乱,所以想将每个知识点模块化,并且能够搭建自己的API库,方便以后能够直接使用!
今天主要来讨论一下我们最常用的打印字符串,如果实现调试打印和颜色打印。
1、明确需求在Linux开发环境下,我们日常使用的打印字符串的主要需求可能有两种:
基于以上两个基本需求,我们来进行简单封装。
2、打印级别分类打印级别参考内核的分类,设置级别如下:
typedef enum { LOG_EMERG=0, LOG_ALERT, LOG_CRIT, LOG_ERR, LOG_WARNING, LOG_NOTICE, LOG_INFO, LOG_DEBUG }GLOBAL_LOG_LEVEL;3、打印级别控制打印级别分类后,我们定义全局变量,来全局控制打印级别。
GLOBAL_LOG_LEVEL g_log_level = LOG_INFO; 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)); strcat(str_tmp,global_log_level_string[level]); strcat(str_tmp, "] ");通过以上代码,将时间和打印级别信息都添加到字符串之前。
输出效果如下:
[2022-10-21 09:13:54 INFO] log info output5、颜色定义颜色控制如何做?
很简单,在输出字符串前,符合特定的颜色控制格式,就可以更改打印颜色了。
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、颜色控制定义完各类颜色后,我们要做的就是对于不同级别的打印,选择不同的颜色!
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文件加入到自己工程即可使用!
【源码获取】https://www.dongni.work/archives/resourceall
作者: _嵌入式艺术_, 来源:面包板社区
链接: https://mbb.eet-china.com/blog/uid-me-4040659.html
版权声明:本文为博主原创,未经本人允许,禁止转载!
相关推荐阅读
-
_嵌入式艺术_
2024-04-23 07:52
-
【一文秒懂】Linux ADB调试环境搭建指南
-
【一文秒懂】Linux ADB调试环境搭建指南1、ADB介绍ADB:Android Debug Bridge,安卓调试桥,是用的最多的一种命令行工具,它能够在电脑端和安卓支持的设备端进行通信,其通信方...
-
_嵌入式艺术_
2024-04-02 08:07
-
【WiFi开发全攻略】WIFI常用工具汇总
-
【WiFi开发全攻略】WIFI常用工具汇总本节主要介绍我们开发过程中,WiFi常用的开发工具,内容主要介绍工具种类以及基本的使用方法,更多使用可以见后面章节。1、iwconfigiwconfig 是一...
-
_嵌入式艺术_
2024-03-11 08:49
-
【WiFi开发全攻略】WIFI基础知识大全
-
image-202402181514311121. Wi-Fi起源现在我们大家对Wi-Fi肯定都不陌生,无论是笔记本,手机,智能电视,都离不开Wi-Fi。目前我们一般用的都是Wi-Fi5,Wi-Fi6...
-
_嵌入式艺术_
2024-01-27 01:43
-
【面试集合】谈谈Linux调度策略
-
【面试集合】谈谈Linux调度策略
1、常用调度策略
linux内核的三种调度方法:
SCHED_OTHER :分时调度策略,SCHED_FIFO:实时调度策略,先到先服务SCHED_RR:...
-
_嵌入式艺术_
2024-01-27 01:40
-
【面试集合】你知道的 CPU体系架构有哪些?
-
【面试集合】你知道的 CPU体系架构有哪些?2.1 CPU体系架构有哪些?我们常见的CPU架构有哪些呢?如果我们熟悉Linux,那么这个问题肯定不难回答!我们查看内核目录下的arch子目录,就可以看到...
-
_嵌入式艺术_
2024-01-22 22:24
-
【一文秒懂】Ftrace系统调试工具使用终极指南
-
1、Ftrace是什么
Ftrace是Function Trace的简写,由 Steven Rostedt 开发的,从 2008 年发布的内核 2.6.27 中开始就内置了。
Ftrace是一个系...
_嵌入式艺术_ 2023-5-6 09:40