RTOS日志库ulog与EasyLogger详细对比

📅 发布时间:2026/7/12 20:50:47 👁️ 浏览次数:
RTOS日志库ulog与EasyLogger详细对比
文章目录ulogEasyLogger主要特性rxi_logEasyLogger与ulog对比ROM 及 RAM 空间占用详细数据EasyLogger (elog)ulog易用性与集成新手友好度扩展性项目迭代需求相关文章uloghttps://github.com/rdpoor/ulogulog 是一个非常简洁、易用的 C/C 日志组件第一个字母 u 代表 μ即微型的意思。它能做到最低 ROM1K, RAM0.2K 的资源占用。ulog 不仅有小巧体积同样也有非常全面的功能。高效且独立依赖性极低仅需stdio.h、string.h和stdarg.h等标准库文件。示例代码#includestdio.h#includeulog.h// To use uLog, you must define a function to process logging messages. It can// write the messages to a console, to a file, to an in-memory buffer: the// choice is yours. And you get to choose the format of the message.//// The following example prints to the console.//// One caveat: msg is a static string and will be over-written at the next call// to ULOG. This means you may print it or copy it, but saving a pointer to it// will lead to confusion and astonishment.//voidmy_console_logger(ulog_level_tseverity,constchar*msg){printf(%s [%s]: %s\n,get_timestamp(),// user defined functionulog_level_name(severity),msg);}intmain(){intarg42;ULOG_INIT();// log messages with a severity of WARNING or higher to the console. The// user must supply a method for my_console_logger, e.g. along the lines// of what is shown above.ULOG_SUBSCRIBE(my_console_logger,ULOG_WARNING_LEVEL);// log messages with a severity of DEBUG or higher to a file. The user must// provide a method for my_file_logger (not shown here).ULOG_SUBSCRIBE(my_file_logger,ULOG_DEBUG_LEVEL);ULOG_INFO(Info, arg%d,arg);// logs to file but not consoleULOG_CRITICAL(Critical, arg%d,arg);// logs to file and console// dynamically change the threshold for a specific loggerULOG_SUBSCRIBE(my_console_logger,ULOG_INFO_LEVEL);ULOG_INFO(Info, arg%d,arg);// logs to file and console// remove a loggerULOG_UNSUBSCRIBE(my_file_logger);ULOG_INFO(Info, arg%d,arg);// logs to console only}EasyLoggerhttps://github.com/armink/EasyLoggerEassyLogger是一款超轻量级(ROM1.6K, RAM0.3K)、高性能的 C/C 日志库非常适合对资源敏感的软件项目例如 IoT 产品、可穿戴设备、智能家居等等。相比 log4c、zlog 这些知名的 C/C 日志库 EasyLogger 的功能更加简单提供给用户的接口更少但上手会很快更多实用功能支持以插件形式进行动态扩展。主要特性支持用户自定义输出方式例如终端、文件、数据库、串口、485、Flash…日志内容可包含级别、时间戳、线程信息、进程信息等日志输出被设计为线程安全的方式并支持 异步输出 及 缓冲输出 模式支持多种操作系统RT-Thread、UCOS、Linux、Windows、Nuttx…也支持裸机平台日志支持 RAW格式 支持 hexdump 支持按 标签 、 级别 、 关键词 进行动态过滤各级别日志支持不同颜色显示扩展性强支持以插件形式扩展新功能。部分示例代码log_a(Hello EasyLogger!);log_e(Hello EasyLogger!);log_w(Hello EasyLogger!);log_i(Hello EasyLogger!);log_d(Hello EasyLogger!);log_v(Hello EasyLogger!);rxi_logrxi_log是一个轻量级的日志库将源码中的log.c和log.h文件加入到你的项目中即可开始使用。EasyLogger与ulog对比ulog是RT-Thread官方集成的日志组件也是支持其它RTOS系统的下面表格偏重与列ulog在RT-Thread的关系了它其实也能很方便的移植到其它系统ROM 及 RAM 空间占用详细数据具体数值会因编译器优化等级-O2/-Os、使能的功能如是否开启颜色、是否开启异步、标签长度配置而有波动。以下数据基于典型配置开启基本信息、标签、行号关闭颜色的实测估算EasyLogger (elog)ROM (Flash) 占用:核心代码: 约 1.2KB ~ 1.6KB。含 Flash 插件: 若启用 elog_flash 插件用于掉电保存日志ROM 会增加约 2KB ~ 3KB取决于 Flash 驱动实现。特点: 代码极其紧凑几乎没有冗余。如果不使用插件仅核心功能非常小。RAM 占用:静态占用: 约 0.1KB ~ 0.3KB (主要是全局配置结构体和少量缓冲区)。输出缓冲: 默认使用较小的静态缓冲区通常 256 字节左右可配置。特点: 同步模式下几乎不占额外线程栈若自行实现异步输出需额外开辟线程栈。ulogROM (Flash) 占用:核心代码: 约 1.5KB ~ 2.5KB。原因: 比 elog 略大是因为集成了更多的抽象层、异步处理逻辑以及多后端管理框架。配置影响: 如果开启 ULOG_ASYNC_ENABLE异步模式会包含环形缓冲区管理和线程创建代码ROM 会相应增加。RAM 占用:静态占用: 约 0.2KB ~ 0.5KB。异步缓冲区: 默认开启异步模式时需要分配环形缓冲区RingBuffer默认大小通常为 512 字节 ~ 2KB可在 menuconfig 中调整。线程栈: 异步输出需要独立的日志线程默认栈大小约 512 字节 ~ 1KB取决于日志复杂度和输出速度。下表中easylogger的基础模式是不开启异步模式异步模式资源对比总结表易用性与集成新手友好度EasyLogger集成步骤仅需复制 3 个核心文件elog.c/h、elog_port.c/h修改 port 文件中 FreeRTOS 的队列 / 互斥锁接口3 分钟即可完成集成API 极简elog_i(tag, “info: %d”, val)、elog_e(tag, “error: %s”, str)学习成本极低例程丰富官方提供 FreeRTOSELog 的完整例程STM32/RT1052 等直接复用。ulog集成步骤需配置模块如启用异步、过滤功能修改 port 文件适配 FreeRTOS 的内存分配 / 队列API 稍复杂支持模块化调用如ulog_output()自定义输出、ulog_filter()配置过滤规则但灵活性更高文档较简洁需自行调试部分配置如日志缓存大小。扩展性项目迭代需求ulog支持日志输出到 TCP/UDP适合 FreeRTOSLWIP 的物联网项目支持日志按模块划分如驱动模块、业务模块、通信模块可单独开关某模块日志支持日志格式化缓存减少 printf 的性能开销嵌入式 printf 是性能瓶颈。EasyLogger基础扩展仅支持自定义输出如 Flash/SD 卡无原生网络输出模块过滤仅支持标签级无细粒度模块划分无格式化缓存直接调用 printf适合对性能要求不高的场景。二者都很优秀都可以选择。相关文章MacOS安装VSCode在QEMU上模拟跑FreeRtosRTOS日志库ulog与EasyLogger详细对比RTOS数据库FlashDB、TFDB、SQLite选哪个作者帅得不敢出门