uLog 是啥?
uLog 就是为资源紧张的单片机、裸机系统准备的日志库。它只用两文件(.h + .c),全 C 写的,几乎没有依赖,跟 Log4j、Log4c 那套概念差不多,却轻得像根羽毛。
小贴士:如果编译时不打开
ULOG_ENABLED,整个库根本不生成代码,省得占用任何空间。
它到底解决了哪些痛点?
|
传统问题 |
uLog 的解决方案 |
| 日志开销大 |
只在需要时编译进代码,关闭后 0 负担 |
| 日志级别统一难 |
支持多输出,每个输出自带阈值(CRITICAL/ERROR/…/TRACE) |
| 移植成本高 |
只依赖 |
| 调试信息散落 |
统一的 |
安装 & 上手
-
1. 下载源码:
git clone https://github.com/rdpoor/ulog.git(或者直接把ulog.h、ulog.c拉进项目) -
2. 配置宏:在编译选项里加
-DULOG_ENABLED=1(想省就不加) -
3. 实现日志接收函数
void my_console_logger(ulog_level_t lvl, const char *msg) {
printf("%s [%s]: %s\n", get_timestamp(), ulog_level_name(lvl), msg);
}
4. 初始化 & 订阅
ULOG_INIT(); // 必须的初始化
ULOG_SUBSCRIBE(my_console_logger, ULOG_WARNING_LEVEL); // 只打印 WARN 以上
5. 随手写日志
ULOG_INFO("系统启动,参数=%d", arg);
ULOG_ERROR("温度异常:%0.2f°C", temp);
技巧:想把日志写到文件或环形缓冲区,只要再写一个
my_file_logger()、my_ringbuf_logger(),然后ULOG_SUBSCRIBE即可,完全解耦。
优缺点速评
|
优点 |
缺点 |
| 极度轻量
:源码不到 2 KB,编译后几乎不占内存 |
功能相对单一
:不提供,需自行实现高级特性(如日志轮转) |
| 多输出+阈值
:同一条日志可同时投递到多个渠道 |
无内置时间戳
:需要自行实现 |
| 可裁剪
:宏控制全部代码生成,关闭即 0 体积 |
仅 C 语言
:不直接支持 C++ 的 RAII 风格(但可以封装) |
| 易调试
:日志字符串是静态的,省去动态分配 |
静态字符串覆盖
:同一条日志在下一次调用前会被覆盖,指针存储要小心 |
总结
如果你在玩 STM32、ESP32、裸机或任何资源紧张的 MCU,想要一个“随用随开、随关随走”的日志系统,uLog 真是首选。它的设计哲学就是“别让日志抢走你的资源”,而且上手几行代码就能看到效果。缺点也很明确——功能不够丰富,需要自行补齐,但这恰恰也是它轻量的根本原因。总之,想要日志、又怕膨胀,直接把 uLog 拉进来,省事省心。
项目地址:https://github.com/rdpoor/ulog