QuickLogger是一款应用于嵌入式Linux设备(Embedded Linux)中的快速日志管理程序。它绝对简单,小巧,几乎无需任何配置即可开始工作。 对于使用者来说,仅仅只需提供一个进程(或线程),调用Log_Manage这一个函数即可开始工作。
- 充分考虑了嵌入式Linux系统中flash的特性,具备定时存储,批量存储等多种功能(考虑flash寿命);
- 结合设备Debug功能,将日志分为多个层次,满足现场调试和日志纠错的需求;
- 日志内容包含级别、时间戳、线程(进程)信息等;
- 日志输出被设计为线程安全的方式;
- 具备按照设定要求,定时备份日志和清理老的日志功能;
- 结合基本的正则表达式,支持按 标签 、 级别 、 关键词 、进程号 等进行动态过滤;
- 各标签日志支持不同颜色显示;
- 充分考虑了嵌入式设备的供电可靠性问题,具备掉电后上电日志系统正常保护功能;
-
0.[D]:调试(Debug) LOG-D 仅打印,不保存 保存普通流程打印信息
-
1.[V]:普通(Normal) LOG-N 打印,定时保存至flash 保存需要定期观察的打印信息(缓存写入,可能会丢失)
-
2.[E]:错误(Error) LOG-E 打印,立即保存至flash 保存致命错误打印信息(立即写入,不会丢失)
注:谷歌Android Logcat日志层级 ,级别最高为 0(Assert) ,最低为 5(Verbose) 。
-
0.[A]:断言(Assert)
-
1.[E]:错误(Error)
-
2.[W]:警告(Warn)
-
3.[I]:信息(Info)
-
4.[D]:调试(Debug)
-
5.[V]:详细(Verbose)
- log-xxxxxxx-all-normal.tar.gz 已经保存并压缩的普通日志;
- log-xxxxxxx-all-normal.txt 正在写入的普通日志;
- log-xxxxxxx-all-error.tar.gz 已经保存并压缩的致命日志;
- log-xxxxxxx-all-error.txt 正在写入的致命日志;
4.若上一步创建了一个新的txt文件,则把前一个文件关闭,并检查同级别log-xxxxxxx-all-normal.tar.gz的数量,若超过指定数量(可配置),则删除多余的压缩包(多余多少可配置)。
注:按每分钟产生一个txt文件并压缩,7位数可无间断保存9999999/1440/356=19年,完全满足需要。
后续我还会根据大家需求,不断的完善和测试新代码。也非常欢迎大家设计、开发更多实用插件和功能,一起来完善 QuickLogger 。如果觉得这个开源项目很赞,可以点击项目主页 右上角的 Star ,同时把它推荐给更多有需要的朋友。
- Log_Manage 日志管理线程,开辟一个日志管理线程(进程),然后调用此函数即可。
- LogD Debug日志级别
- LogN Normal日志级别
- LogE Error日志级别
只需要在LogD、LogN、LogE后增加_R、_G等,即可增加多种颜色的日志,内置颜色七种,分别如下:
- LogD_R 红色日志
- LogD_G 绿色日志
- LogD_Y 黄色日志
- LogD_B 蓝色日志
- LogD_P 粉色日志
- LogD_C 蓝绿色日志
- LogD_W 白色日志
目前输出过滤功能考虑用编辑器实现,本软件内暂不实现(好像没有多大的必要性,用编辑器配合正则表达式可以很好的实现日志过滤,且更为灵活)
有两种输出格式:
-
第一种调用大小写LogD,输出: N 10-13 20:56:11.106#895~task1 Hello test_task1
-
第二种调用大小写LOGD,输出: N 10-13 20:56:11.106#895~task1 Hello test_task1 <test_task1.cpp:15>
请查看示例程序 log_manage.cpp
您只需开启一个进程,调用一次Log_Manage()后,即可完成日志的管理工作。其他任何进程或线程,直接调用宏(类似LogD),即可
使用期请先配置log_config.h文件,说明如下:
#define MESSAGE_TYPE 300356 //不知道写啥,就写公司股票代码吧
#define LOG_MESSAGE_QUEUE_KEY 300356 //日志消息队列KEY
#define LOG_SWITCH_BYTE 1024 * 128 //日志切换最大字节数
#define MAX_NORMAL_ZIP_LOGS_ON_DISK 50 //普通日志压缩包保留数量
#define MAX_ERROR_ZIP_LOGS_ON_DISK 5 //错误日志压缩包保留数量
#define MAX_LOG_CACHE_COUNT 50 //普通日志最大缓存条数,超出此值,写入FLASH
#define MAX_LOG_POOL_BYTES 512 //日志缓存池最大缓存数量,防止单日志长度很长,但是总条数不多,所以一直不写入文件的问题
#define MAX_LOG_DIR_SPACE 1024*1024*10 //日志目录最大给定空间,用于发生致命错误时,保护终端存储空间不会被占满
#define LOG_ROOT_PATH "/mnt/user/LOG/" //日志目录
#define ERR_SN "sn-error-record.txt" //错误日志的序号文件
#define NORMAL_SN "sn-normal-record.txt" //一般日志的序号文件