[技术干货] atiny_log | LiteOS 物联网操作系统中的日志打印组件使用分享

# 1. 为什么使用日志打印组件 在使用LiteOS做项目时,经常使用串口输出调试信息以便于定位问题,查看系统运行情况。 在通常情况下,大多数人都会直接使用 printf 函数输出,但是printf函数只能输出我们编写的信息,无法输出更多的信息来帮助我们定位问题,所以**LiteOS提供了一个atiny_log日志打印组件,基于printf,比printf更有效率**。 # 2. atiny_log组件 atiny_log组件的源码非常简单,只有两个文件: ![](https://img-blog.csdnimg.cn/20200123175030855.png) - `atiny_log.h`:组件定义; - `atiny_log.c`:组件实现; 在使用的时候只需要包含头文件`<atiny_log.h>`即可。 atiny_log组件的使用非常简单,两点: - ① 如果你想写printf,请用`ATINY_LOG`替换; - ② 保持第一个参数为日志输出等级,其余参数和printf相同; 日志输出等级支持哪些呢?在`atiny_log.h`文件中已枚举定义: ```c typedef enum { LOG_DEBUG = 0, LOG_INFO, LOG_WARNING, LOG_ERR, LOG_FATAL, LOG_MAX } atiny_log_e; ``` 其中提供了前五种选择,`LOG_MAX`不是日志输出等级。 # 3. atiny_log组件使用示例 编写一个测试文件`atiny_log_test.c`,编写以下内容: ```c #include <osal.h> #include <atiny_log.h> static int atiny_log_test_entry() { /* 设置系统当前日志等级为最低 */ atiny_set_log_level(LOG_DEBUG); /* 开始测试 */ ATINY_LOG(LOG_DEBUG, "This is a LOG_DEBUG Test!\r\n"); ATINY_LOG(LOG_INFO, "This is a LOG_INFO Test!\r\n"); ATINY_LOG(LOG_WARNING, "This is a LOG_WARNING Test!\r\n"); ATINY_LOG(LOG_ERR,"This is a LOG_ERR Test!\r\n"); ATINY_LOG(LOG_FATAL, "This is a LOG_FATAL Test!\r\n"); return 0; } int standard_app_demo_main() { osal_task_create("atiny_log_test",atiny_log_test_entry,NULL,0x400,NULL,12); return 0; } ``` 编译,下载到开发板中,串口输出如下: ![](https://img-blog.csdnimg.cn/202001231759577.png) 可以看到除了正常和使用printf相同的输出之外,还加上了一些日志信息,分别为: - **该条日志的日志等级**; - **当前系统运行时间**; - **该条日志所在的文件以及该行所在位置**; 可以看到,日志输出的行号和实际文件中的行号保持一致,这样一来,**在哪儿出现问题一目了然,非常方便**: ![](https://img-blog.csdnimg.cn/20200123180219612.png#pic_center) ```