02
2025
07
01:03:34

embedlog:极致轻量的嵌入式日志框架!

前言
做嵌入式调试,老觉得日志输出又慢又占空间?标准 printf、syslog、各种库,啥都有,可要么臃肿得像头大象,要么灵活性不给力。今天给大家安利一个 C89 写的超轻量级日志框架——em)bedlog,让你的日志输出又快又小,还能随心所欲多路输出。

图片

embedlog 是什么?
简单一句话:embedlog 是个专为嵌入式和资源受限系统设计的日志管理库。

  • • 纯 C89 实现,兼容性绝佳
  • • 编译时可按需开启/关闭功能,生成最小二进制
  • • 支持多种输出:stderr、stdout、文件、串口、syslog(Nuttx)甚至自定义回调
  • • 可选精度的时间戳、文件/行/函数信息、ANSI 颜色、日志轮转、二进制日志等

解决了哪些痛点?
你有没有遇到过:

  • • 内存被日志库吃干抹净,一堆浮点、locale、宽字符真没用
  • • 多任务打印互相打架,输出信息乱序、乱码
  • • 想同时输出到文件、串口、调试终端,结果得写 N 套 printf
  • • 日志文件暴涨,没有轮转又自动删不了


embedlog 一举搞定:可编译选项精简代码,多线程安全单行加锁,多输出流自动管理,文件轮转随心设。

核心功能亮点

功能
说明
多输出
stderr/stdout、文件(支持大小/日期轮转)、串口、自定义回调
时间戳与精度
支持 clock_t、time_t、REALTIME、MONOTONIC,可选毫秒/微秒/纳秒
位置追踪
打印文件名、行号、函数名(C99+)
颜色高亮
ANSI 颜色,可选扩展色
二进制/内存打印
类似 Wireshark 风格的内存块十六进制+ASCII 输出,或紧凑二进制日志
可裁剪
几乎所有功能都可在 configure 时开启/关闭,最终只保留你需要的部分
线程安全
支持 EL_THREAD_SAFE + pthread,或可选单行重入

使用示例

#include <embedlog.h>

intmain(void){
    el_init();
    el_set_timestamp(EL_TS_LONG, EL_TS_TM_REALTIME, EL_TS_FRACT_US);
    el_print_extra_info(1);
    el_enable_file_log("/tmp/log.txt",5,512*1024);
    el_print(ELN,"日志开始记录,多路输出 OK!");
    el_print(ELF,"致命错误示例");
    el_pmemory(ELN, some_buffer, buffer_len);
    el_cleanup();
return0;
}

上面代码会同时把日志打到 stderr 和 /tmp/log.txt,自动轮转 5 个文件,每个最大 512KB,还带时间戳、文件/行信息。


优缺点对比

类别
优点
缺点
体积
可关闭大部分功能,生成极小二进制
如果全开,代码量也会上去
性能
只做必要格式化,速度快
超大消息或高精度时间戳开销稍多
灵活性
多输出流、自定义回调、可选功能
配置选项多,上手有点门槛
可移植性
纯 C89,依赖少,POSIX 可选
部分功能需 POSIX 支持(如 CLOCK_MONOTONIC)
易用性
API 简单直观,和 printf 思路一致
需要手动调用 init/cleanup,略微显式

总结与推荐
embedlog 就像在你项目里插了个开关:需要什么日志功能,就开哪个,性能、内存都给你最大留白。不管是深度嵌入式还是普通 C/C++ 应用,都能轻松上手,日志管理从此不再臃肿。强烈建议给下个项目配上它,调试、监控、出问题追踪都更省心!

项目地址:https/github.com/mlyszczek/embedlog




推荐本站淘宝优惠价购买喜欢的宝贝:

image.png

本文链接:https://hqyman.cn/post/12046.html 非本站原创文章欢迎转载,原创文章需保留本站地址!

分享到:
打赏





休息一下~~


« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

请先 登录 再评论,若不是会员请先 注册

您的IP地址是: