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(正在开发):支持文件转档、软件运行时动态加载配置文件等与文件日志输出相关功能。
准备一份裸机工程文件,将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中添加代码:
- #define LOG_TAG "main"
- /********************elog_code_begin**************************/
-
- /* 初始化 EasyLogger */
- elog_init();
- /* 设置每个级别的日志输出格式 */
- //输出所有内容
- elog_set_fmt(ELOG_LVL_ASSERT, ELOG_FMT_ALL);
- //输出日志级别信息和日志TAG
- elog_set_fmt(ELOG_LVL_ERROR, ELOG_FMT_LVL | ELOG_FMT_TAG | ELOG_FMT_TIME);
- elog_set_fmt(ELOG_LVL_WARN, ELOG_FMT_LVL | ELOG_FMT_TAG | ELOG_FMT_TIME);
- elog_set_fmt(ELOG_LVL_INFO, ELOG_FMT_LVL | ELOG_FMT_TAG | ELOG_FMT_TIME);
- //除了时间、进程信息、线程信息之外其余全部输出
- elog_set_fmt(ELOG_LVL_DEBUG, ELOG_FMT_ALL & ~(ELOG_FMT_FUNC | ELOG_FMT_T_INFO | ELOG_FMT_P_INFO));
- //输出所有内容
- elog_set_fmt(ELOG_LVL_VERBOSE, ELOG_FMT_ALL & ~(ELOG_FMT_FUNC | ELOG_FMT_T_INFO | ELOG_FMT_P_INFO));
- //使用颜色API开启输出
- elog_set_text_color_enabled(true);
- /* dynamic set enable or disable for output logs (true or false) */
- // elog_set_output_enabled(false);
- /* dynamic set output logs's level (from ELOG_LVL_ASSERT to ELOG_LVL_VERBOSE) */
- // elog_set_filter_lvl(ELOG_LVL_WARN);
- /* dynamic set output logs's filter for tag */
- //elog_set_filter_tag("main");
- /* dynamic set output logs's filter for keyword */
- // elog_set_filter_kw("Hello");
- /* dynamic set output logs's tag filter */
- // elog_set_filter_tag_lvl("main", ELOG_LVL_WARN);
- /* 启动 EasyLogger */
- elog_start();
- /*********************elog_code_end***************************/
-
- /********************elog_test_begin**************************/
- log_a("Hello EasyLogger!");
- log_e("Hello EasyLogger!");
- log_w("Hello EasyLogger!");
- log_i("Hello EasyLogger!");
- log_d("Hello EasyLogger!");
- log_v("Hello EasyLogger!");
- /********************elog_test_end**************************/
测试结果:
