【升级】C/C++ 日志库 EasyLogger 新增彩 {MOD}日志、异步输出等

2019-12-08 14:39发布

本帖最后由 sunnydragon 于 2016-11-14 21:44 编辑

EasyLogger 是一款超轻量级(ROM<1.6K, RAM<0.3K)、高性能的 C/C++ 日志库,非常适合对资源敏感的软件项目,例如: IoT 产品、可穿戴设备、智能家居等等。 EasyLogger 功能简单,上手速度快,更多实用功能支持以插件形式进行动态扩展。 主要特性
  • 支持用户自定义输出方式(例如:终端、文件、数据库、串口、485、Flash...);
  • 日志内容可包含级别、时间戳、线程信息、进程信息等;
  • 日志输出被设计为线程安全的方式,并支持 异步输出缓冲输出 模式;
  • 支持多种操作系统(RT-Thread、UCOS、Linux、Windows...),也支持裸机平台;
  • 日志支持 RAW格式 ;
  • 支持按 标签 、 级别 、 关键词 进行动态过滤;
  • 各级别日志支持不同颜 {MOD}显示
  • 扩展性强,支持以插件形式扩展新功能。

本次更新版本号 V1.11.13,主要发布以下重要功能:

1、新增彩 {MOD}日志
所有级别日志可独立设置颜 {MOD},错误信息更加明显,日志更加赏心悦目,进一步提升调试效率。详细使用方法,请参照说明文档(点击查看)。Linux Demo 里已经默认开启了此功能,大致效果如下,欢迎试用
TextColor.png (27.47 KB, 下载次数: 0) 下载附件 2016-11-14 19:44 上传
点击查看 在 xshell 上显示彩 {MOD}串口日志的配置方法

2、新增异步输出模式(非阻塞输出模式)
之前的版本默认为阻塞的同步输出模式,即用户线程输出日志时,日志必须完全输出到输出介质(串口、网络、文件等)上,输出过程才会退回。
这样会影响应用软件执行时间及执行效率。开启异步输出模式后,后台有专门的日志线程负责完成日志输出功能,应用程序输出日志时,底层只将日志拷贝至缓冲区后,随即退出日志输出方法。

异步输出默认使用 POSIX pthread 实现,对于 Windows 、Liunx 、RT-Thread 及其他支持 POSIX pthread 的用户,只需开启异步输出相关配置,即可开启此功能。
对于缺少 pthread 支持的平台,例如:ucos ,也可以参考 elog_async.c 中关于异步输出线程的实现方式,自己动手实现。
PS:Linux  Demo 中已开启 pthread 异步输出模式,RT-Thread Demo 已使用其线程相关 API 实现异步输出模式。

3新增缓冲输出模式
开启缓冲输出模式后,如果缓冲区不满,用户线程在进行日志输出时,无需等待日志彻底输出完成,即可直接返回。
但当日志缓冲区满以后,将会占用当前用户线程,自动将缓冲区中的日志全部输出干净。
同时用户也可以在其他非用户线程,通过定时等机制使用 `void elog_flush(void)` 将缓冲区中的日志输出干净。


下载方式
最新版请关注 GitHubhttps://github.com/armink/EasyLogger
本坛下载: EasyLogger-V1.11.13.zip (3.79 MB, 下载次数: 174) 2016-11-14 20:07 上传 点击文件名下载附件
EasyLogger-V1.11.13






友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
50条回答
sunnydragon
1楼-- · 2019-12-10 01:08
myxiaonia 发表于 2016-11-15 08:08
闪存库现在可以作为数据保存组件使用了吗,就是频繁的保存很多用户参数


没太听明白你说的这个“数据保存组件”具体指的什么?
sunnydragon
2楼-- · 2019-12-10 03:53
 精彩回答 2  元偷偷看……
myxiaonia
3楼-- · 2019-12-10 07:29
sunnydragon 发表于 2016-11-15 20:33
没太听明白你说的这个“数据保存组件”具体指的什么?

恩 恩 ,就是类似于把闪存当作eeprom来用
hanzo852
4楼-- · 2019-12-10 12:44
编译失败
static const char *level_output_info[] = {
        [ELOG_LVL_ASSERT]  = "A/",
        [ELOG_LVL_ERROR]   = "E/",
        [ELOG_LVL_WARN]    = "W/",
        [ELOG_LVL_INFO]    = "I/",
        [ELOG_LVL_DEBUG]   = "D/",
        [ELOG_LVL_VERBOSE] = "V/",
};
/* color output info */
static const char *color_output_info[] = {
        [ELOG_LVL_ASSERT]  = ELOG_COLOR_ASSERT,
        [ELOG_LVL_ERROR]   = ELOG_COLOR_ERROR,
        [ELOG_LVL_WARN]    = ELOG_COLOR_WARN,
        [ELOG_LVL_INFO]    = ELOG_COLOR_INFO,
        [ELOG_LVL_DEBUG]   = ELOG_COLOR_DEBUG,
        [ELOG_LVL_VERBOSE] = ELOG_COLOR_VERBOSE,
};

///////////////
........easyloggersrcelog.c(116): error:  #29: expected an expression
security
5楼-- · 2019-12-10 16:30
hanzo852 发表于 2016-11-16 08:44
编译失败
static const char *level_output_info[] = {
        [ELOG_LVL_ASSERT]  = "A/",

这种问题,我猜原因:多数是没打开 C99 编译选项,
请打开对 C99 的支持,再试下。
小溪
6楼-- · 2019-12-10 19:33
hanzo852 发表于 2016-11-16 08:44
编译失败
static const char *level_output_info[] = {
        [ELOG_LVL_ASSERT]  = "A/",

打开工程options for target's stm32f103xE,在 Misc Control一栏空白处添加--c99,再重新编译一下

一周热门 更多>