1、全局静态日志等级
1.1、为什么要设置不同的日志等级?
在不同的开发阶段,想要输出的信息是不同的。
前期开发,比较细致的信息可以使用Debug等级去输出,后面调试完毕提高日志级别就可以了,此时不要堆积大量信息,保留关键性环节的执行。
但是debug输出的信息代码又不想注释或删去,就可以通过日志级别来调整;
1.2、设置方式
RT-Thread Settings,找到ulog组件配置,静态输出日志级别;
这里设置全局静态日志等级为Information,也就是说经过模块日志等级过滤后,日志等级在Information以上的才会输出;(下面结合模块仍有说明)
2、模块的名称、模块静态日志等级、基本使用示例
想在哪个文件使用ulog组件时,宏定义里配置;
可选的日志级别有:
/* logger level, the number is compatible for syslog */
#define LOG_LVL_ASSERT 0
#define LOG_LVL_ERROR 3
#define LOG_LVL_WARNING 4
#define LOG_LVL_INFO 6
#define LOG_LVL_DBG 7
示例:
全局静态日志等级为Information,module1模块静态日志等级为Debug,
- 首先,模块静态日志等级Debug过滤,是会让LOG_E/W/I/D都输出的;
- 然后,全局日志等级Information过滤,LOG_E/W/I输出。
#define LOG_TAG "module1"
#define LOG_LVL LOG_LVL_DBG
#include <ulog.h>
int main()
{
LOG_E("Error1"); //输出
LOG_W("Warning1"); //输出
LOG_I("Information1"); //输出
LOG_D("Debug1"); //不输出
}
3、过滤模块日志_打开/关闭模块日志、动态调整模块日志等级
对于某个模块,可以单独控制是否输出日志,需要在ulog组件配置中打开“使能运行时日志筛选器”。
3.1、关闭/打开模块日志输出
//关闭module1的日志
ulog_tag_lvl_filter_set("module1", LOG_FILTER_LVL_SILENT);
//打开module1的日志
ulog_tag_lvl_filter_set("module1", LOG_FILTER_LVL_ALL);
3.2、动态调整模块日志等级
比如,执行下面这条命令后,模块module1的日志等级会临时变为WARNING,这里所说的临时是相对于宏定义中的日志等级,下面5会提供一个实验。
//动态修改module1的日志级别
ulog_tag_lvl_filter_set("module1", LOG_LVL_WARNING);
4、同一个文件输出多个模块日志
不能使用LOG_X这个API,改为ulog_x,x=e/w/i/d,就可以自定义输出日志的模块名称。
ulog_e("模块名","输出内容");
5、以上说明的测试代码及实验结果
#define LOG_TAG "module1"
#define LOG_LVL LOG_LVL_DBG
#include <ulog.h>
int main(void)
{
//全局日志lvl为information
//module1的日志
LOG_E("Error1"); //输出
LOG_W("Warning1"); //输出
LOG_I("Information1"); //输出
LOG_D("Debug1"); //不输出
//一个文件里想有另一个模块的日志-module2的日志
ulog_e("module2","module2_error"); //输出
ulog_d("module2","module2_debug"); //不输出
//关闭module1的日志
ulog_tag_lvl_filter_set("module1", LOG_FILTER_LVL_SILENT);
LOG_E("Error2"); //不输出
LOG_W("Warning2"); //不输出
LOG_I("Information2"); //不输出
LOG_D("Debug2"); //不输出
//动态修改module1的日志级别
ulog_tag_lvl_filter_set("module1", LOG_LVL_WARNING);
LOG_E("Error3"); //输出
LOG_W("Warning3"); //输出
LOG_I("Information3"); //不输出
LOG_D("Debug3"); //不输出
//打开module1的所有日志,仍按宏定义中的等级,而不是上次的LOG_LVL_WARNING
ulog_tag_lvl_filter_set("module1", LOG_FILTER_LVL_ALL);
LOG_E("Error4"); //输出
LOG_W("Warning4"); //输出
LOG_I("Information4"); //输出
LOG_D("Debug4"); //不输出
while(1);
}
6、彩色日志
颜色对应着不同的含义,但是颜色只适合眼睛去看。
现在是日志实时输出到串口,还是用rt-thread stdio比较方便,如果是用户去使用,普通的串口调试助手是无法显示颜色信息的,如图:
我尝试了一款终端软件MobaXterm可以显示颜色,配置如下(支持Putty):
很喜欢这个软件的界面,丰富又简洁。
还发现一个优点,输出日志保存到文件,MobaXterm会自动去掉关于颜色的信息。