大家都很清楚,特别是在项目出现问题时,如果没有可用的日志记录帮助我们定位问题,那将会非常令人痛苦。
由于我们无法一直通过调试器进行单步调试程序,因此设备的运行日志变得尤为重要。
通常,我们对日志有以下要求:
-
支持不同的日志级别(例如
Debug
、Warning
、Info
、Error
、Fatal
); -
日志打印应简单易用,类似于
printf
的使用方式; -
允许设置日志级别;
-
占用空间较小;
-
可配置性良好,甚至可以禁用日志功能;
-
根据不同日志级别支持颜色高亮显示;
-
可以根据需要自定义配置和时间戳;
-
支持嵌入式实时操作系统 (RTOS);
以上是一些基本功能的要求,在嵌入式设备中,有时我们希望还能保存设备的运行日志,因此我们需要以下一些功能: -
支持多种访问方式,如通过串口终端或保存到嵌入式文件系统中;
-
支持通过shell命令行通过串口终端访问日志;
并不是所有需求都需要一一满足。
除了常见的日志库log4c
和log4cpp
,我在下面给大家推荐了3个非常出色的开源日志库,它们非常适合用于单片机项目。这些库从轻量级开始,逐渐丰富功能,最后一个是功能非常强大的,所以请耐心阅读直到最后。
rxi_log
项目地址:https://github.com/rxi/log.c
基于 C99 实现的简单日志库,具体输出如下所示;
具体用法
将源码中的log.c
和log.h
集成到你的项目中即可,需要打印日志的话,调用下面的API即可,如下所示;
log_trace(const char *fmt, ...);
log_debug(const char *fmt, ...);
log_info(const char *fmt, ...);
log_warn(const char *fmt, ...);
log_error(const char *fmt, ...);
log_fatal(const char *fmt, ...);
除了这些API,还有log_set_quiet
,log_set_lock
,LOG_USE_COLOR
等等,详情请看原项目。
ulog
项目地址:https://github.com/rdpoor/ulog
uLog 为嵌入式微控制器或任何资源有限的系统提供结构化的日志记录机制。它继承了流行的 Log4c
和 Log4j
平台背后的一些概念,但开销更低。
uLog 的一些特点:
-
uLog 易于集成到几乎任何环境中,由一个头文件和一个源文件组成,并且是用纯 C 编写的。 -
uLog 提供熟悉的严重级别(CRITICAL、ERROR、WARNING、INFO、DEBUG、TRACE)。 -
uLog 支持多个用户定义的输出(控制台、日志文件、内存缓冲区等),每个输出都有自己的报告阈值级别。 -
uLog 是具有最小依赖性的“积极独立”,仅需要 stdio.h、string.h 和 stdarg.h。 -
当您不使用 uLog 时,它不会妨碍您:如果 ULOG_ENABLED 在编译时未定义,则不会生成日志记录代码。 -
uLog 已经过很好的测试。有关详细信息,请参阅随附的 ulog_test.c 文件。
color coding
EasyLogger
项目地址:https://github.com/armink/EasyLogger
TextColor
这个项目我用了很长时间,强烈推荐,是RT-Thread大佬的作品,已经集成到RTOS的内部了,支持的功能非常丰富,基本满足各种开发的需求。
特点如下:
-
轻量,ROM; -
支持多种访问模式(例如:终端、文件、数据库、串口、485、Flash…); -
日志内容可包含级别、时间戳、线程信息、进程信息等; -
线程安全,并支持 异步输出 及 缓冲输出 模式; -
支持多种操作系统(RT-Thread、UCOS、Linux、Windows…),也支持裸机平台; -
日志支持 RAW格式 ,支持 hexdump ; -
支持按 标签 、 级别 、 关键词 进行动态过滤; -
各级别日志支持不同颜色显示; -
扩展性强,支持以插件形式扩展新功能。
以上只是这个项目的其中一部分,具体可以参考项目地址。
以上就是良许教程网为各位朋友分享的Linu系统相关内容。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多干货等着你 !