0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

推荐3个非常不错的开源日志库

GReq_mcu168 来源:小麦大叔 作者:小麦大叔 2022-05-12 14:51 次阅读
日志系统在系统开发和调整过程中的重要性,想必大家应该都清楚。特别是项目出问题之后,却没有日志可以帮忙定位问题,就非常令人痛苦。

因为我们不可能一直通过调试器去单步调试程序,所以设备的运行日志显得尤为重要。

通常我们对日志有这些要求:

  • 不同的日志级别(Debug,Warning,Info,Error,Fatal);
  • 日志打印要和printf一样简单易用;
  • 能够设置日志级别;
  • 占用空间小;
  • 可配置,甚至可以禁用日志;
  • 基于不同日志级别,支持颜色高亮;
  • 可以自定义配置,时间戳;
  • 支持RTOS

以上是比较基本的功能,但是在嵌入式设备中,有的时候我们希望可以保存设备的运行日志,我们需要以下的一些功能;

  • 支持多种访问方式,比如串口终端,保存到嵌入式文件系统中;
  • 支持shell命令行通过串口终端进行访问;

以上这些需求不一定会全部实现。

除了常用的log4clog4cpp,下面给大家推荐3个非常不错的开源日志库,比较适合用在单片机的项目中。从开始的轻量,到后面的功能丰富,最后一个很强大,所以请耐心看到最后。

rxi_log

项目地址:https://github.com/rxi/log.c

基于 C99 实现的简单日志库,具体输出如下所示;

0d58c684-d1bc-11ec-bce3-dac502259ad0.pngimage-20211204142024466

具体用法

将源码中的log.clog.h集成到你的项目中即可,需要打印日志的话,调用下面的API即可,如下所示;

log_trace(constchar*fmt,...);
log_debug(constchar*fmt,...);
log_info(constchar*fmt,...);
log_warn(constchar*fmt,...);
log_error(constchar*fmt,...);
log_fatal(constchar*fmt,...);

除了这些API,还有log_set_quietlog_set_lockLOG_USE_COLOR等等,详情请看原项目。

ulog

项目地址:https://github.com/rdpoor/ulog

uLog 为嵌入式微控制器或任何资源有限的系统提供结构化的日志记录机制。它继承了流行的Log4cLog4j平台背后的一些概念,但开销更低。

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 文件。
0d985fe2-d1bc-11ec-bce3-dac502259ad0.pngcolor coding

EasyLogger

项目地址:https://github.com/armink/EasyLogger

0dbeb408-d1bc-11ec-bce3-dac502259ad0.pngTextColor

这个项目我用了很长时间,强烈推荐,是RT-Thread大佬的作品,已经集成到RTOS的内部了,支持的功能非常丰富,基本满足各种开发的需求。

特点如下:

  • 轻量,ROM<1.6K, RAM<0.3K
  • 支持多种访问模式(例如:终端、文件、数据库、串口、485、Flash...);
  • 日志内容可包含级别、时间戳、线程信息、进程信息等;
  • 线程安全,并支持异步输出缓冲输出模式;
  • 支持多种操作系统(RT-Thread、UCOSLinux、Windows...),也支持裸机平台
  • 日志支持RAW格式,支持hexdump
  • 支持按标签级别关键词进行动态过滤;
  • 各级别日志支持不同颜色显示;
  • 扩展性强,支持以插件形式扩展新功能。

以上只是这个项目的其中一部分,具体可以参考项目地址。

summary

希望大家在平常的开发中,重视日志的使用,每一个开发阶段设置不同级别的日志,不同的模块也分别设置模块的日志,这样方便定位出现一些问题,快速解决,提高效率。

审核编辑 :李倩


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6000

    文章

    43969

    浏览量

    620766
  • 日志系统
    +关注

    关注

    0

    文章

    7

    浏览量

    6949
  • 开源
    +关注

    关注

    3

    文章

    2985

    浏览量

    41716

原文标题:高手常用的3个开源库,让单片机开发事半功倍!

文章出处:【微信号:mcu168,微信公众号:硬件攻城狮】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    SDK5开源高频注入的头文件怎么没有?

    ST SDK5开源,高频注入的头文件怎么没有?只有。c文件。怎么能够获得?
    发表于 04-17 07:37

    OpenHarmony开源GPUMesa3D适配说明

    ,对下使用Gallium框架,屏蔽驱动差异。在RK3568中,panfrost对ARM GPU提供了非常好的开源驱动支持。 二、适配方法 在RK3568 GPU 开源mesa
    发表于 12-25 11:38

    redis容器内怎么查看redis日志

    redis是一款流行的开源内存数据库,常用于缓存、消息队列、任务管理等场景。在使用redis时,了解如何查看redis日志对于排查问题、监控性能和分析应用程序行为非常重要。在本文中,我们将介绍
    的头像 发表于 12-05 10:10 1333次阅读

    logcat命令抓取日志方法

    命令抓取日志 logcat -b main -b system -b crash -r 1024 -n 5 -f android.log -v threadtime -b:加载可供查看的缓冲区的日志
    的头像 发表于 11-23 17:31 533次阅读
    logcat命令抓取<b class='flag-5'>日志</b>方法

    C++异步日志实践

    一个高效可拓展的异步C++日志库:RING LOG,本文分享了了其设计方案与技术原理等内容 导论 同步日志与缺点 传统的日志也叫同步日志,每次调用一次打印
    的头像 发表于 11-09 10:29 228次阅读
    C++异步<b class='flag-5'>日志</b>实践

    基于Rust的Log日志库介绍

    Rust是一门系统级编程语言,因其安全性、高性能和并发性而备受欢迎。在Rust应用程序中,日志记录是一项非常重要的任务,因为它可以帮助开发人员了解应用程序的运行情况并解决问题。Rust的Log库提供
    的头像 发表于 09-19 14:49 2095次阅读

    多串口彩色波形显示日志助手 云控日志CloudLog.exe

    CloudLog回读所有未读过的日志。 使用开源CloudLog的方法: 直接从 https://gitee.com/hsav20/CloudLog.git 克隆整个仓库。 将CloudLog.c
    发表于 09-06 16:51

    Linux日志分析工具logwatch的安装及使用

    日志非常重要的系统文件,管理员每天的重要工作就是分析和查看服务器的日志,判断服务器的健康状态。但是日志管理又是一项非常枯燥的工作,如果需要
    发表于 08-24 10:08 264次阅读

    开源三方】bignumber.js:一大数数学

    OpenHarmony应用。如果是发布到开源社区,称为开源三方,开发者可以通过访问开源社区获取。接下来我们来了解bignumber.js开源
    发表于 08-21 16:37

    【FireBeetle 2 ESP32-S3开发板体验】在Arduino中使用基于SPIFFS分区的sqlite3嵌入式数据

    FireBeetle 2 ESP32-S3开发板上使用SPIFFS分区,接下来,继续分享在Arduino中使用基于SPIFFS分区的sqlite3。 sqlite是一非常小巧的支持S
    发表于 08-03 10:17

    云控日志CloudLog,帮助您实现电脑、手机、嵌入式系统等不同平台的日志管理统一化

    日志缓冲的数值使用Base64编码。 应用名、标签及线程标识符一般只使用数字或字母。 日期时间可以选择是否传送,可以是2字节的毫秒(ms)、3字节的微秒(us)或8字节的全部时间。 一简单的示例
    发表于 08-01 17:08

    MySQL三种日志讲解

    MySQL 日志包含了错误日志、查询日志、慢查询日志、事务日志、二进制日志等,如果存储引擎使用的
    的头像 发表于 07-25 11:15 457次阅读
    MySQL三种<b class='flag-5'>日志</b>讲解

    分享几个不错的嵌入式开源项目

    于是,我就自己根据需求写了简单的日志库,通过这几年项目的验证,大问题没有,后面维护项目时,发现了这个开源项目,又给我提供了一些思路。这里也分享给大家。
    的头像 发表于 07-04 09:09 3002次阅读
    分享几个<b class='flag-5'>不错</b>的嵌入式<b class='flag-5'>开源</b>项目

    怎么使用Go重构流式日志网关呢?

    流式日志网关的主要功能是提供 HTTP 接口,接收 CDN 边缘节点上报的各类日志(访问日志/报错日志/计费日志等),将
    的头像 发表于 06-18 10:42 390次阅读
    怎么使用Go重构流式<b class='flag-5'>日志</b>网关呢?

    Logstash、Fluentd、Fluent Bit和Vector,谁才是开源日志收集最强王者?

      企业无论是已经使用了开源日志收集工具,还是准备选择一款或多款工具,都有必要了解日志收集工具的关键要求。这些要求包括:高数据吞吐量、可靠性、可扩展性、灵活性、安全性以及资源(CPU和内存)消耗
    的头像 发表于 05-28 09:16 1014次阅读