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

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

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

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

2. atiny_log组件

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

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

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

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

  • 该条日志的日志等级
  • 当前系统运行时间
  • 该条日志所在的文件以及该行所在位置

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

发布了161 篇原创文章 · 获赞 503 · 访问量 20万+

猜你喜欢

转载自blog.csdn.net/Mculover666/article/details/104076964