atiny_log | LiteOS 物联网操作系统中的日志打印组件使用分享

mculover666 发表于 2020/01/23 18:10:07 2020/01/23
【摘要】 1. 为什么使用日志打印组件在使用LiteOS做项目时,经常使用串口输出调试信息以便于定位问题,查看系统运行情况。在通常情况下,大多数人都会直接使用 printf 函数输出,但是printf函数只能输出我们编写的信息,无法输出更多的信息来帮助我们定位问题,所以LiteOS提供了一个atiny_log日志打印组件,基于printf,比printf更有效率。2. atiny_log组件atiny...

1. 为什么使用日志打印组件

在使用LiteOS做项目时,经常使用串口输出调试信息以便于定位问题,查看系统运行情况。

在通常情况下,大多数人都会直接使用 printf 函数输出,但是printf函数只能输出我们编写的信息,无法输出更多的信息来帮助我们定位问题,所以LiteOS提供了一个atiny_log日志打印组件,基于printf,比printf更有效率

2. atiny_log组件

atiny_log组件的源码非常简单,只有两个文件:


image.png

  • atiny_log.h:组件定义;

  • atiny_log.c:组件实现;

在使用的时候只需要包含头文件<atiny_log.h>即可。

atiny_log组件的使用非常简单,两点:

  • ① 如果你想写printf,请用ATINY_LOG替换;

  • ② 保持第一个参数为日志输出等级,其余参数和printf相同;

日志输出等级支持哪些呢?在atiny_log.h文件中已枚举定义:

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,编写以下内容:

#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;}

编译,下载到开发板中,串口输出如下:

image.png


可以看到除了正常和使用printf相同的输出之外,还加上了一些日志信息,分别为:

  • 该条日志的日志等级

  • 当前系统运行时间

  • 该条日志所在的文件以及该行所在位置

可以看到,日志输出的行号和实际文件中的行号保持一致,这样一来,在哪儿出现问题一目了然,非常方便


image.png


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区),文章链接,文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:cloudbbs@huaweicloud.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。