【开源分享】EasyLogger,一款超轻量级(ROM<1.6K, RAM<0.3K)、高性能的 C/C++ 日志库

EasyLogger使用教程 int main(void) { /* close printf buffer */ setbuf(stdout, NULL); /* initialize EasyLogger */ elog_init(); /* set EasyLogger log format */ elog_set_fmt(ELOG_LVL_ASSERT, ELOG_FMT_ALL); elog_set_fmt(ELOG_LVL_ERROR, ELOG_FMT_LVL... 阅读详情
AI摘要

EasyLogger是专为资源敏感场景设计的超轻量级、高性能C/C++日志库,适用于嵌入式开发领域。它资源占用极低,支持多平台运行,具有灵活的日志输出、动态过滤与分级控制、插件化扩展等特性。文中还给出使用示例、与其他日志库对比及适用场景和开发建议。

请添加图片描述


深入解析EasyLogger:一款专为资源敏感场景设计的轻量级日志库

1. 简介

EasyLogger 是一款专为资源敏感场景设计的超轻量级、高性能 C/C++ 日志库,适用于 IoT 设备、可穿戴设备、智能家居等嵌入式开发领域。其核心优势在于极低的资源占用(ROM <1.6K,RAM <0.3K)和高扩展性,同时支持多平台运行,包括裸机、RT-Thread、Linux、Windows 等。相比于传统日志库(如 zlog、log4cpp),EasyLogger 以简洁的接口和灵活的插件机制著称,开发者可快速上手并定制功能。


2. 核心特性

1. 轻量化与高性能

EasyLogger 的设计目标是在保证功能完整性的前提下,最小化资源消耗。其代码体积和内存占用极低,适合嵌入式设备或对性能要求严格的场景。例如,在 STM32 等微控制器上,仅需少量移植代码即可运行。

2. 多平台兼容性

支持多种操作系统(如 RT-Thread、UCOS、Linux、Windows)及裸机环境。开发者无需修改核心代码即可跨平台移植,显著降低开发成本。

3. 灵活的日志输出

  • 多输出方式:支持终端、文件、串口、Flash 等多种输出目标,用户可通过插件扩展自定义输出方式(如数据库或网络)。
  • 格式化与颜色显示:日志内容可包含级别、时间戳、线程/进程信息等,并支持不同级别日志的颜色区分,提升可读性。
  • 异步与缓冲输出:通过异步输出模式避免日志写入阻塞主线程,缓冲输出模式则进一步优化性能。

4. 动态过滤与分级控制

  • 多级日志:提供从 Assert(最高)到 Verbose(最低)共 6 个日志级别,支持静态(编译时)和动态(运行时)级别控制。
  • 过滤机制:可按标签、关键词或级别动态过滤日志,快速定位问题。

5. 插件化扩展

EasyLogger 的核心功能可通过插件扩展,例如:

  • Flash 插件:无需文件系统,直接将日志存储到 Flash 中。
  • File 插件:支持日志文件循环保存、按大小或时间转档。

3. 使用示例

1. 移植与初始化

在项目中集成 EasyLogger 需完成以下步骤:

  • 源码添加:将核心文件(如 elog.c、elog_utils.c)和移植接口文件(elog_port.c)加入工程。
  • 接口实现:重写输出函数(如串口打印)和锁机制(确保多线程安全)。
// 初始化示例
ElogErrCode elog_init(void);
void elog_start(void);

2. 日志输出

EasyLogger 提供简化的宏接口,支持标签分类和分级输出:

#define LOG_TAG "wifi.module"
log_e("Connection failed: %d", error_code);  // 错误级别日志
log_d("Received data: %s", buffer);          // 调试级别日志

3. 配置与优化

  • 格式设置:通过 elog_set_fmt 配置日志头信息(如时间、标签、行号)。
  • 性能调优:启用异步模式减少主线程阻塞,或使用缓冲模式批量写入。

4. 与其他日志库的对比

特性EasyLoggerzlogspdlog
语言支持C/C++CC++11+
资源占用极低(ROM<1.6K)中等较高
多线程安全支持(内置锁机制)部分场景不稳定1支持
跨平台性 广泛(含裸机)依赖 POSIX依赖 C++标准库

5. 适用场景与开发建议

1. 适用场景

  • 嵌入式设备:资源受限的 IoT 设备或穿戴设备。
  • 实时系统:需低延迟日志输出的场景(如工业控制)。
  • 多模块项目:通过标签分类管理不同模块的日志。

2. 开发建议

  • 合理分级:发布版本关闭低级别日志(如 Verbose)以减少开销。
  • 插件选择:根据存储介质选择插件(如 Flash 插件适合无文件系统设备)。
  • 异步模式:在高频日志场景下启用异步输出以避免性能瓶颈。

总结

EasyLogger 凭借其轻量化和高扩展性,成为嵌入式开发中日志管理的优选方案。无论是快速调试还是长期运行的系统监控,它都能提供稳定高效的日志支持。开发者可通过官方 GitHub 获取源码及详细文档,进一步探索其高级功能(如日志助手工具和 Elasticsearch 集成计划)。


参考

【1】[EasyLogger 核心特性与移植指南](嵌入式开源库】EasyLogger的使用, 一款轻量级且高性能的日志库)
【2】多平台支持与插件机制解析
【3】实际项目中的日志分级实践

EasyLogger的代码解读和移植(linux和stm) 文章目录1. EasyLogger目录结构分析2. EasyLogger之docs查看总结2.1 EasyLogger之docs查看2.1.2 api->kernel.md文档2.1.3 port->kernel.md文档2.2 EasyLogger之docs总结3. EasyLogger之源码分析3.1 源码分析值头文件分析3.1.1 elog.h(EasyLogger核心函数头文件)3.1.2 elog_cfg.h(EasyLogger配置函数头文件)3.1.3 elog_port.c(对应 阅读详情

相关推荐

STM32移植EasyLogger日志库

EasyLogger是一款超轻量级(ROM

Known668的博客 4835

【嵌入式开源库】EasyLogger的使用, 一款轻量级且高性能的日志库

EasyLogger 是一款超轻量级 、高性能的 C 日志库,非常适合对资源敏感的软件项目,例如:IoT 产品、可穿戴设备、智能家居等等。相比 log4c、zlog 这些知名的 C 日志库,EasyLogger 的功能更加简单,提供给用户的接口更少,但上手会很快,更多实用功能支持以插件形式进行动态扩展。本章使用环境:虚拟机ubuntu1804 、正点原子stm32407探索者开发板、工程模板:HAL库 - 实验4 串口通信实验。...

凉开水白菜的博客 7837

轻松掌握嵌入式系统日志管理:EasyLogger实战指南

本文还有配套的精品资源,点击获取 简介:嵌入式系统中的日志管理对于系统监控和问题排查至关重要。EasyLogger作为一款轻量级且功能丰富的日志库,提供高效、可定制的日志记录解决方案,支持多线程和动态配置。本文将详细介绍EasyLogger的核心特性、集成方法和优化策略,帮助嵌入式开发者提升开发效率和问题解决能力。 1. 嵌入式系统日志管理的重要性 在现代的...

weixin_34718952的博客 2294

EasyLogger | 一款轻量级且高性能的日志库

嵌入式开源项目精选专栏 本专栏由Mculover666创建,主要内容为寻找嵌入式领域内的优质开源项目,一是帮助开发者使用开源项目实现更多的功能,二是通过这些开源项目,学习大佬的代码及背后的实现思想,提升自己的代码水平,和其它专栏相比,本专栏的优势在于: 不会单纯的介绍分享项目,还会包含作者亲自实践的过程分享,甚至还会有对它背后的设计思想解读。 目前本专栏包含的开源项目有: SFUD | 一个简...

Mculover666的博客(嵌入式) 2万+

Easylogger轻量级日志的 linuxdemo

1. 介绍 EasyLogger 是一款超轻量级(ROM<1.6K, RAM<0.3K)、高性能的 C/C++ 日志库,非常适合对资源敏感的软件项目,例如: IoT 产品、可穿戴设备、智能家居等等。相比 log4c、zlog 这些知名的 C/C++ 日志库, EasyLogger 的功能更加简单,提供给用户的接口更少,但上手会很快,更多实用功能支持以插件形式进行动态扩展。 1.1 主要特性 支持用户自定义输出方式(例如:终端、文件、数据库、串口、485、Flash...); 日志内容可包含级别、时间戳、线程信息、进程信息等; 日志输出被设计为线程安全的方式,并支持 异步输出 及 缓冲输出 模式; 支持多种操作系统(RT-Thread、UCOS、Linux、Windows...),也支持裸机平台; 日志支持 RAW格式 ,支持 hexdump ; 支持按 标签 、 级别 、 关键词 进行动态过滤; 各级别日志支持不同颜色显示; 扩展性强,支持以插件形式扩展新功能。 名词解释: 1、RAW格式:未经过格式化的原始日志。 2、标签:在软件中可以按照文件、模块、功能等方面,对需要打印的日志设定标签,实现日志分类。 1.2 插件 1、Flash:使用 EasyFlash 库提供的Flash操作接口,无需文件系统,直接将日志存储在 Flash 中。 2、File:支持文件转档、文件循环保存等与文件日志输出相关功能。

经典烧脑算法逻辑题--高楼扔鸡蛋:最少次数测出鸡蛋摔碎临界点。

如果在第2层没碎,换到第3层扔.......如果第59层没碎,换到第60层扔;有2个鸡蛋,从100层楼上往下扔,以此来测试鸡蛋的硬度。比如鸡蛋在第9层没有摔碎,在第10层摔碎了,那么鸡蛋不会摔碎的临界点就是9层。因此,我们尝试每10层扔一次,第一次从10层扔,第二次从20层扔,第三次从30层......一直扔到100层。如果第一枚鸡蛋,在50层碎了,第二枚鸡蛋,就从第1层开始扔,一层一层增长,一直扔到第49层。如果第一枚鸡蛋在50层没碎了,则继续使用二分法,在剩余楼层的一半(75层)往下扔。

借雨醉东风的博客 1818

【亲测免费】 探秘小巧却强大的开源日志库——EasyLogger

在开发各类软硬件项目时,日志记录是一项不可或缺的任务。它能够帮助我们追踪程序运行状态,定位问题,尤其在资源有限的IoT设备或嵌入式系统中,选择一个高效且轻量级的日志库至关重要。今天,就为大家带来一款专为此而生的开源项目——[EasyLogger](https://github.com/armink/EasyLogger),让我们一探究竟! ## 项目简介 EasyLogger是一款极简高效的C...

gitblog_00611的博客 1258

课程复习---分析空间数据的细胞空间关系(python版本的mistyR)

课程复习---分析空间数据的细胞空间关系(python版本的mistyR)

weixin_53637133的博客 1222

好用的开源日志库:Easylogger解析与移植STM32

Easylogger是一款轻量级嵌入式日志库,其核心配置位于elog_cfg.h文件中。主要配置包括:日志输出总开关(ELOG_OUTPUT_ENABLE)、静态日志级别(ELOG_OUTPUT_LVL)、断言检查(ELOG_ASSERT_ENABLE)、缓冲区大小(ELOG_LINE_BUF_SIZE)等。高级配置支持彩色输出、异步/缓冲模式、日志格式定制等功能。移植时需配置串口输出,重定义输出接口,并注意日志换行和标签设置。通过灵活配置这些参数,可以在嵌入式系统中实现高效、可定制的日志功能,平衡调试需求

C语言、数据结构、单片机、嵌入式实时操作系统、C++ 学习路径记录 5293

【5G全网建设】Option3X和Option2模式建安市、兴城市和四水市核心网、承载网网络设计与部署

拓扑规划: Option 3X网络拓扑图规划 Option 2网络拓扑图规划 设备部署: 建安市核心网 建安市承载中心机房 建安市骨干汇聚机房 建安市3区汇聚机房 建安市C站点无线机房 兴城市核心网 兴城市承载中心机房 兴城市骨干汇聚机房 兴城市2区汇聚机房 兴城市B站点无线机房 数据配置: 建安市核心网 建安市承载中心机房 建安市骨干汇聚机房 建安市3区汇聚机房 建安市C站点无线机房 兴城市核心网 兴城市承载中心机房 兴城市骨干汇聚机房 兴城市2区汇聚机房 兴城市B站点无线机房 业务调试

weixin_67183034的博客 8858

分享一个N-MOS管和P-MOS管驱动应用实例

大家好,我是『芯知识学堂』的SingleYork,今天给大家分享一下MOS管驱动相关的知识。 MOS管在电路设计中是比较常见的,按照驱动方式来分的话,有两种,即:N-MOS管和P-MOS管。MOS管跟三极管的驱动方式有点类似,但又不完全相同,那么今天笔者将会给大家简单介绍一下N-MOS管和P-MOS管的工作原理,并结合自己实际的应用来给大家分享一下如何来驱动N-MOS管和P-MOS管。 首先,我们先来看一下N-MOS管和P-MOS管分别在电路中的电气符号: 咋一看上面两个电气符号,似乎非常的相似,可能让很

『芯知识学堂』SingleYork 的博客 3万+

STM32HAL 移植 EasyLogger 极简美开源打印文件日志输出(裸机开发神器)

EasyLogger 是一款超轻量级日志库

qq_36075612的博客 1万+

中小型微服务系统 硬件设备如何部署,QPS大概多少

作为一名合格的开发工程师,不仅仅要在前期开发阶段对业务和技术有深入了解,知道选用哪种合适的技术,业务如何拆分,还要思考后期线上环境,资源,延迟,性能等如何优化维护以及分布式系统一些线上生产的一些问题。 本篇主要针对之前了解的情况对硬件设备资源做一个简单的介绍: 首先分布式系统线上实践问题,我们应该对公司的流量,各个服务,网管,注册中心应该如何部署,部署多少台机器才合适,每台机器的配置如何,每天整体流量有多少,高峰期的请求量有多少,你的整体系统是否扛得住(注:很多公司现在直接使用K8S docker 实现

wangxuelei036的博客 1万+

EasyLogger 学习分享

elog

小半之家 1133

交通仿真软件:SUMO_(13).Python脚本与TraCI接口

通过TraCI接口,用户可以实现与SUMO仿真器的实时交互,获取和控制交通数据。本文档详细介绍了如何使用Python脚本与TraCI接口进行交互,包括基本的设置、数据获取和控制方法。此外,还展示了几个高级应用示例,如交通流优化、多代理系统、车辆路径规划和车辆行为模拟。这些示例可以帮助用户更好地理解如何利用TraCI接口进行复杂的交通仿真和分析。希望这些内容对您有所帮助,如果您有任何问题或需要进一步的帮助,请参考SUMO的官方文档或社区支持。

kkchenjj的博客 997

Android 车载应用之快速入门

车载 Android 系统也被称为 Android Automotive OS,是对原始 Android 系统的一个功能扩充版本。与手机系统一样,Android Automotive OS 源代码完全开放,第三方供应商和汽车制造商可以官方源码的基础上自行开发和拓展,无论是编程语言还是各项接口,都与 Android 系统保持了一致。

xiangzhihong8的专栏 1112

easylogger

嵌入式资讯精选 今天 以下文章来源于嵌入式大杂烩 ,作者ZhengNL 交心 在我们嵌入式开发中,调试代码的方法有很多。比如使用调试器在线调试、借助一些测量仪器、输出调试日志等方式。 没有哪种方法是最好的调试方法,实际开发中需要根据实际情况借助不同的方法进行调试。但是,在一些稍微大点的项目中,输出调试日志却是比较好的调试方法。 输出日志可以比较随意,想输出什么就输出什么,但是也得注意两个点: 一是输出的日志尽量整洁明了,因为如果日志稍微多一点,看起来就会很乱,很扰心; 二是方便打开/关闭

yazhouren的专栏 1892

GEE:计算非水体概率影像(水体淹没次数)

本文记录了在GEE平台上使用哨兵数据计算沿海地区非水体概率图像的计算方法和代码。基于像素,概率范围0-100。首先使用哨兵数据(s2)和大津算法(OTSU)计算的水体指数阈值来提取水体,然后计算研究区非水体像素在时间段内出现的概率。

养乐多的博客 2140

轻量级日志库 EasyLogger:为嵌入式开发量身打造的日志神器!

EasyLogger 允许用户自定义日志的输出方式,无论是终端、文件、数据库、串口,还是 Flash,都可以轻松实现。

zuenquan521的博客 1674

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

开源嵌入式代码分析——EasyLogger

EasyLogger是对智能

ben392797097的专栏 1128

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

STM32+fafts+Easylogger输入日志功能

由于第一步和第二步网上教程比较多,就不再重复写,同时Easylogger移植的文章也不少也就不写了。只写关键的第三步,如何修改Easylogger日志输出驱动文件,使调用log_x("日志")是能输出日志到sd卡,并按照日期和时间进行存储。Easylooger本身是带日志输出到文件功能的,但是Easylogger本身源码用的不是Fafts的接口函数,所以需要移植。要让Easylogger能够输出日志到sd卡总共分三补。第三步,修改Easylogger日志输出驱动文件。第一步,移植STM32+SD卡驱动。

ben392797097的专栏 3221

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

[MM32软件]【灵动微电子MM32F5330测评】03 移植easylogger

相比 log4c、zlog 这些知名的 C/C++ 日志库, EasyLogger 的功能更加简单,提供给用户的接口更少,但上手会很快,更多实用功能支持以插件形式进行动态扩展。3、支持LOG过滤,比如可以按标签过滤,只打印某一个模块的功能,也可以按等级过滤,只打印ERROR信息,而且还可以按过滤关键字。2、支持LOG等级,比如,error,debug,warn,info等,这个可以只打印错误信息或者调试信息;在上一次LED工程目录下,新建EASYLOGGER,如图所示,复制如图相关文件。

ic2121的博客 513

EasyLogger:轻量级高性能日志库

**许可**:MIT Copyright (c) armink.ztl@gmail.com

gitblog_00757的博客 1148

学习笔记--easylogger+freertos+zynq 小demo学习

整个实现过程为通过elog_strcpy函数,判断各个标记位是否打开,填充log_buf发送缓冲区,最终通过elog_port_output(log_buf, log_len)函数发送。其核心代码实现了日志结构体的初始化,开始,停止以及过滤有关的功能,设置输出格式:elog_set_fmt(uint8_t level, size_t set),其中level为日志的等级,set则为需要使能的格式位说明。重定义:通过宏定义elog_i,elog_d,elog_e等为log_i,log_d,log_e等。

wljy1314的博客 2093

EasyLogger 详解:从架构设计到实战应用

EasyLogger是一款轻量级嵌入式日志库,采用前后端分离设计,支持裸机、RTOS、Linux等多种环境。其核心架构分为应用层、核心层和移植层,前端负责日志格式化、过滤和缓冲,后端处理硬件适配输出。模块设计清晰,通过标准化接口实现跨平台移植,仅需修改5-6个函数即可适配新平台。提供6种日志级别和标签管理功能,支持动态过滤输出。在裸机移植中,主要实现串口输出和中断控制等接口,配置灵活可调。该库具有轻量高效、跨平台兼容和易扩展等特点,适合各类嵌入式开发场景。

lagrange_kai的博客 1073

EasyLogger

摘抄:https://github.com/armink/EasyLogger 1. 介绍 EasyLogger是一款超轻量级(ROM<1.6K, RAM<0.3K)、高性能的 C/C++ 日志库,非常适合对资源敏感的软件项目,例如: IoT 产品、可穿戴设备、智能家居等等。相比 log4c、zlog 这些知名的 C/C++ 日志库, EasyLogger 的功能更加简单,提供给用户的接口更少,但上手会很快,更多实用功能支持以插件形式进行动态扩展。 1.1 主要特性 支持用户自定义输出.

魔都攻城狮的博客 1663
上一篇: 智能驾驶域控制器的“终极大考”:解析EOL测试的核心价值与技术实践
下一篇: uniapp,手把手教你 APP热更新 & 应用发布页面制作与部署
智驾
博客等级 码龄11年 6671粉丝 574原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智驾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值