• 移植EasyLogger


    1. 软件介绍

    EasyLogger 是一款超轻量级、高性能的C日志库,非常适合对资源敏感的软件项目,例如:IoT产品、可穿戴设备、智能家居等等。相比log4c、zlog这些知名的C日志库,EasyLogger的功能更加简单,提供给用户的接口更少,但上手会很快,更多实用功能支持以插件形式进行动态扩展。

    主要特性

    • 支持用户自定义输出方式(例如:终端、文件、数据库、串口、485、Flash...);

    • 日志内容可包含级别、时间戳、线程信息、进程信息等;

    • 日志输出被设计为线程安全的方式;

    • 支持多种操作系统(RT-Thread、UCOS、Linux、Windows...),也支持裸机平台;

    • 日志支持RAW格式;

    • 支持按标签、级别 、关键词进行动态过滤;

    • 各级别日志支持不同颜色显示;

    • 扩展性强,支持以插件形式扩展新功能。

    名词解释:

    1、RAW格式:未经过格式化的原始日志。

    2、标签:在软件中可以按照文件、模块、功能等方面,对需要打印的日志设定标签,实现日志分类。

    插件

    • 1、Flash:使用EasyFlash库提供的Flash操作接口,可以把日志直接存储在Flash中。

    • 2、File(正在开发):支持文件转档、软件运行时动态加载配置文件等与文件日志输出相关功能。

    2. 移植EasyLogger 

     准备一份裸机工程文件,将printf重定向到串口打印,准备好之后开始移植easylogger。

     2.1 将下载好的开源文件中的easylogger复制到裸机工程中。

    2.2 在keil中添加easylogger组件的源码文件:

    • port/elog_port.c:elog移植接口文件;

    • src/elog.c:           elog核心功能源码;

    • src/elog_utils.c:elog所用到的一些c库工具函数实现;

    • src/elog_buf.c(可选添加):elog缓冲输出模式源码;

    • src/elog_async.c(可选添加):elog异步输出模式源码;

    2.3 将easylogger/inc头文件路径添加到keil中:

    2.4修改elog_cfg.h中的换行符 

      

    在main.c中添加代码:

    1. #define LOG_TAG "main"
    2. /********************elog_code_begin**************************/
    3. /* 初始化 EasyLogger */
    4. elog_init();
    5. /* 设置每个级别的日志输出格式 */
    6. //输出所有内容
    7. elog_set_fmt(ELOG_LVL_ASSERT, ELOG_FMT_ALL);
    8. //输出日志级别信息和日志TAG
    9. elog_set_fmt(ELOG_LVL_ERROR, ELOG_FMT_LVL | ELOG_FMT_TAG | ELOG_FMT_TIME);
    10. elog_set_fmt(ELOG_LVL_WARN, ELOG_FMT_LVL | ELOG_FMT_TAG | ELOG_FMT_TIME);
    11. elog_set_fmt(ELOG_LVL_INFO, ELOG_FMT_LVL | ELOG_FMT_TAG | ELOG_FMT_TIME);
    12. //除了时间、进程信息、线程信息之外其余全部输出
    13. elog_set_fmt(ELOG_LVL_DEBUG, ELOG_FMT_ALL & ~(ELOG_FMT_FUNC | ELOG_FMT_T_INFO | ELOG_FMT_P_INFO));
    14. //输出所有内容
    15. elog_set_fmt(ELOG_LVL_VERBOSE, ELOG_FMT_ALL & ~(ELOG_FMT_FUNC | ELOG_FMT_T_INFO | ELOG_FMT_P_INFO));
    16. //使用颜色API开启输出
    17. elog_set_text_color_enabled(true);
    18. /* dynamic set enable or disable for output logs (true or false) */
    19. // elog_set_output_enabled(false);
    20. /* dynamic set output logs's level (from ELOG_LVL_ASSERT to ELOG_LVL_VERBOSE) */
    21. // elog_set_filter_lvl(ELOG_LVL_WARN);
    22. /* dynamic set output logs's filter for tag */
    23. //elog_set_filter_tag("main");
    24. /* dynamic set output logs's filter for keyword */
    25. // elog_set_filter_kw("Hello");
    26. /* dynamic set output logs's tag filter */
    27. // elog_set_filter_tag_lvl("main", ELOG_LVL_WARN);
    28. /* 启动 EasyLogger */
    29. elog_start();
    30. /*********************elog_code_end***************************/
    31. /********************elog_test_begin**************************/
    32. log_a("Hello EasyLogger!");
    33. log_e("Hello EasyLogger!");
    34. log_w("Hello EasyLogger!");
    35. log_i("Hello EasyLogger!");
    36. log_d("Hello EasyLogger!");
    37. log_v("Hello EasyLogger!");
    38. /********************elog_test_end**************************/

    测试结果:

    参考文档:第3期 | EasyLogger,一款轻量级且高性能的日志库 

  • 相关阅读:
    【Proteus仿真】【51单片机】停车场车位管理系统
    css 隐藏元素的方法
    Redis6.0 新功能
    Spring 核心与设计思想 以及 创建和使用
    10K起步的软件测试岗到底需要学什么?零基础进阶自动化测试需要哪些技术...
    [附源码]计算机毕业设计旅游网的设计与实现Springboot程序
    2015年408真题复盘
    【Docker】Docker的工具实践及root概念,时间戳的概念和Docker容器安全性设置的详细讲解
    Rest风格操作
    2.3.1 协程设计原理与汇编实现
  • 原文地址:https://blog.csdn.net/qq_45336153/article/details/126382105