嵌入式linux日志库移植,C开源日志库EasyLogger移植和封装使用

阅读: 评论:0

嵌⼊式linux⽇志库移植,C开源⽇志库EasyLogger移植和封装
使⽤
槐木可以做防腐木吗1、写在最前:
开源⽇志库EasyLogger使⽤c语⾔编写,及其简便和通⽤,感谢EasyLogger作者armink的贡献。
复印机碳粉2、代码地址:
3、许可
MIT Copyright (c) [email protected]
4、介绍:
EasyLogger 是⼀款超轻量级(ROM<1.6K, RAM<0.3K)、⾼性能的C⽇志库,⾮常适合对资源敏感的软件项⽬,例如:IoT产品、可穿戴设备、智能家居等等。相⽐log4c、zlog这些知名的C⽇志库,EasyLogger的功能更加简单,提供给⽤户的接⼝更少,但上⼿会很快,更多实⽤功能⽀持以插件形式进⾏动态扩展。
5、主要特性
⽀持⽤户⾃定义输出⽅式(例如:终端、⽂件、数据库、串⼝、485、);
⽇志内容可包含级别、时间戳、线程信息、进程信息等;
氟橡胶成分分析
⽇志输出被设计为线程安全的⽅式;
⽀持多种操作系统(RT-Thread、UCOS、Linux、),也⽀持裸机平台;
⽇志⽀持RAW格式;
⽀持按标签、级别 、关键词进⾏动态过滤
各级别⽇志⽀持不同颜⾊显⽰;
扩展性强,⽀持以插件形式扩展新功能。
名词解释:
1、RAW格式:未经过格式化的原始⽇志。
2、标签:在软件中可以按照⽂件、模块、功能等⽅⾯,对需要打印的⽇志设定标签,实现⽇志分类。
6、插件
1、Flash:使⽤EasyFlash库提供的Flash操作接⼝,可以把⽇志直接存储在Flash中。
2、File:⽀持⽂件转档、软件运⾏时动态加载配置⽂件等与⽂件⽇志输出相关功能。
7、参数配置
EasyLogger拥有过滤⽅式、输出格式、输出开关这些属性。
过滤⽅式⽀持按照标签、级别、关键词进⾏过滤;
可以动态的开启/关闭⽇志的输出;
可设定动态和静态的输出级别(静态:⼀级开关,通过宏定义;动态:⼆级开关,通过API接⼝)
8、输出级别
参考Android Logcat,级别最⾼为0(Assert),最低为5(Verbose)。
0.[A]:断⾔(Assert)
1.[E]:错误(Error)
2.[W]:警告(Warn)
3.[I]:信息(Info)
4.[D]:调试(Debug)
5.[V]:详细(Verbose)
8.1 各个级别⽇志默认颜⾊效果如下。⽤户也可以根据⾃⼰的喜好,在 elog_cfg.h 对各个级别⽇志的颜⾊及字体风格进⾏单独设置。
8.2输出过滤
⽀持按照级别、标签及关键词进⾏过滤。⽇志内容较多时,使⽤过滤功能可以更快定位⽇志,保证⽇志的可读性。更多的过滤功能设置⽅法及细节请阅读\docs\zh\api\kernel.md⽂档。
8.3 输出格式
输出格式⽀持:级别、时间、标签、进程信息、线程信息、⽂件路径、⾏号、⽅法名。每种优先级别可以独⽴设置输出格式。
注:默认为RAW格式,RAW格式⽇志不⽀持标签过滤
8.4 输出⽅式
通过⽤户的移植,可以⽀持任何⼀种输出⽅式。只不过对于某种输出⽅式可能引⼊的新功能,需要通过插件实现,例如:⽂件转存,检索Flash⽇志等等。后期会有更多的插件开源出来。下⾯简单对⽐下部分输出⽅式使⽤场景:
终端:⽅便⽤户动态查看,不具有存储功能;
⽂件与Flash:都具有存储功能,⽤户可以查看历史⽇志。但是⽂件⽅式需要⽂件系统的⽀持,⽽Flash⽅式更加适合应⽤在⽆⽂件系统的⼩型嵌⼊式设备中。
9、移植
因为在linux下使⽤,所以直接进⼊EasyLogger\EasyLogger\demo\os\linux下测试即可
Demo路径:\demo\os\rt-thread\stm32f10x\
API⽂档:\docs\zh\api\kernel.md
螺母
移植⽂档:\docs\zh\port\kernel.md
10、遇到的问题:
1、⽂件和控制台的开关问题,可以整体开关,没有单⼀开关
led日光管
2、级别、过滤策略不能动态控制
解决办法:创建全局flag,写⼀个配置⽂件,开⼀个线程处理,检查⽂件的状态,读取⽂件内容,⽂件中包含问题1和问题2中的参数。
11、接⼝说明:
API:
elog_set_filter(uint8_t level, const char *tag, const char *keyword);  //参数1:要过滤的级别,参数2:要过滤的标签,参数3:要过滤的关键字
elog_set_filter_tag_lvl("test", ELOG_LVL_WARN);    //参数1:要过滤的标签(线程/进程名/模块名)。  参数2:对指定标签过滤,设置显⽰级别,低于此级别不再显⽰
elog_set_filter_tag(const char *tag);              //参数1:要过滤的标签
elog_set_filter_kw("EasyLogger");                  //参数1:要过滤的关键字,所有log中带有关键字的log才会显⽰
elog_set_filter_lvl(ELOG_LVL_WARN);                  //参数1:要过滤的级别,低于此级别的log不显⽰
elog_set_output_enabled(true);                      //参数1:开关,控制log是否打印的开关,全局的,包含⽂件和console
标本夹elog_start();                                    //这⾥默认启动总开关,默认启动异步输出⽅式,默认启动缓冲输出⽅式
elog_init();                                    //log初始化
setbuf(stdout, NULL);                            //关闭 printf 缓冲机制
elog_set_text_color_enabled(true);                //打开颜⾊选项
elog_set_fmt(ELOG_LVL_ERROR, ELOG_FMT_LVL | ELOG_FMT_TAG | ELOG_FMT_TIME);    //设置不同级别所显⽰的格式,这⾥有⼀个枚举来控制
elog_a("tag","Hello hahah");                    //每次需要传⼊tag
log_a("hello");                                    //tag通过宏设置在头⽂件上⾯
/* all formats index */
typedef enum {
ELOG_FMT_LVL    = 1 << 0, /**< level */
ELOG_FMT_TAG    = 1 << 1, /**< tag */
ELOG_FMT_TIME  = 1 << 2, /**< current time */
ELOG_FMT_P_INFO = 1 << 3, /**< process info */
ELOG_FMT_T_INFO = 1 << 4, /**< thread info */
ELOG_FMT_DIR    = 1 << 5, /**< file directory and name */
ELOG_FMT_FUNC  = 1 << 6, /**< function name */
ELOG_FMT_LINE  = 1 << 7, /**< line number */
} ElogFmtIndex;
12、规格,每⾏输出最长字符,ELOG_LINE_BUF_SIZE=512最⼤
过滤标签最⼤长度,ELOG_FILTER_TAG_MAX_LEN=16
过滤关键词最⼤长度,ELOG_FILTER_KW_MAX_LEN=16
过滤器数⽬, 暂时仅⽀持⼀个
13、demo测试完毕后,移植到⼯程中封装⾃⼰的接⼝即可使⽤

本文发布于:2023-06-18 02:28:07,感谢您对本站的认可!

本文链接:https://patent.en369.cn/patent/3/142906.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:过滤   输出   级别   功能   开关   标签   动态
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 369专利查询检索平台 豫ICP备2021025688号-20 网站地图