• Stars
    star
    3,273
  • Rank 13,716 (Top 0.3 %)
  • Language
    C
  • License
    MIT License
  • Created over 9 years ago
  • Updated about 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

An ultra-lightweight(ROM<1.6K, RAM<0.3k), high-performance C/C++ log library. | 一款超轻量级(ROM<1.6K, RAM<0.3k)、高性能的 C/C++ 日志库

EasyLogger


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、Nuttx...),也支持裸机平台;
  • 日志支持 RAW格式 ,支持 hexdump
  • 支持按 标签级别关键词 进行动态过滤;
  • 各级别日志支持不同颜色显示;
  • 扩展性强,支持以插件形式扩展新功能。

名词解释:

  • 1、RAW格式:未经过格式化的原始日志。
  • 2、标签:在软件中可以按照文件、模块、功能等方面,对需要打印的日志设定标签,实现日志分类。

1.2 插件

  • 1、Flash:使用 EasyFlash 库提供的Flash操作接口,无需文件系统,直接将日志存储在 Flash 中。
  • 2、File:支持文件转档、文件循环保存等与文件日志输出相关功能。
  • 3、敬请期待……

1.3 Star & Fork

后续我还会提供更多插件。也非常欢迎大家设计、开发更多实用插件和功能,一起来完善 EasyLogger (Github|OSChina|Coding) 。如果觉得这个开源项目很赞,可以点击项目主页 右上角的 Star ,同时把它推荐给更多有需要的朋友。

2. 使用

2.1 参数配置

EasyLogger 拥有过滤方式、输出格式、输出开关这些属性。

  • 过滤方式支持按照标签、级别、关键词进行过滤;
  • 可以动态的开启/关闭日志的输出;
  • 可设定动态和静态的输出级别
    • 静态:一级开关,通过宏定义,在编译阶段使用;
    • 动态:二级开关,通过API接口,在运行阶段使用。

注:目前参数配置及输出方式都是单例模式,即全局只支持一种配置方式。此模式下,软件会较为简单,但是无法支持复杂的输出方式。

2.2 输出级别

参考 Android Logcat ,级别最高为 0(Assert) ,最低为 5(Verbose) 。

0.[A]:断言(Assert)
1.[E]:错误(Error)
2.[W]:警告(Warn)
3.[I]:信息(Info)
4.[D]:调试(Debug)
5.[V]:详细(Verbose)

2.2.1 输出缤纷多彩的日志

各个级别日志默认颜色效果如下。用户也可以根据自己的喜好,在 elog_cfg.h 对各个级别日志的颜色及字体风格进行单独设置。

TextColor

2.3 输出过滤

支持按照 级别、标签及关键词 进行过滤。日志内容较多时,使用过滤功能可以更快定位日志,保证日志的可读性。更多的过滤功能设置方法及细节请阅读\docs\zh\api\kernel.md文档

注:RAW格式、hexdump 格式日志不支持标签、关键词过滤

2.4 输出格式

输出格式支持:级别、时间、标签、进程信息、线程信息、文件路径、行号、方法名。每种优先级别可以独立设置输出格式。

2.5 输出方式

通过用户的移植,可以支持任何一种输出方式。只不过对于某种输出方式可能引入的新功能,需要通过插件实现,例如:文件转存,检索Flash日志等等。后期会有更多的插件开源出来。下面简单对比下部分输出方式使用场景:

  • 终端:方便用户动态查看,不具有存储功能;
  • 文件与Flash:都具有存储功能,用户可以查看历史日志。但是文件方式需要文件系统的支持,而Flash方式更加适合应用在无文件系统的小型嵌入式设备中。

2.6 Demo

2.6.1 核心功能

下图为在终端中输入命令来控制日志的输出及过滤器的设置,更加直观的展示了 EasyLogger 核心功能。

easylogger

2.6.2 Flash Log(将日志保存到 Flash 中)

下图过程为通过控制台输出日志,并将输出的日志存储到 Flash 中。重启再读取上次保存的日志,最后清空 Flash 日志。

FlashLog

2.6.2 File Log(将日志保存到文件中)

通过 FIle 插件,可以将日志自动保存至文件中。每个文件可以设定大小,超过规定大小后,自动新建新的文件来存储日志。

3. 文档

具体内容参考\docs\zh\下的文件。务必保证在 阅读文档 后再移植使用。

4. 后期

  • Flash存储:在EasyFlash中增加日志存储、读取功能,让EasyLogger与其无缝对接。使日志可以更加容易的存储在 非文件系统 中,并具有历史日志检索的功能;
  • 配置文件:文件系统下的配置文件;
  • 文件转档:文件系统下支持文件按容量转档,按时间区分;
  • 日志助手:开发跨平台的日志助手,兼容Linux、Windows、Mac系统,打开助手即可查看、过滤(支持正则表达式)、排序、保存日志等。前端:HTML5 + Bootstrap + AngularJS + NW.js,后端:Rust + iron + rust-websocket + serial-rs
  • 异步输出:目前日志输出与用户代码之间是同步的方式,这种方式虽然软件简单,也不存在日志覆盖的问题。但在输出速度较低的平台下,会由于增加日志功能,而降低软件运行速度。所以后期会增加 异步输出 方式,关键字过滤也可以放到异步输出中去;
  • Arduino:增加Arduino lib,并提供其Demo;

5. 许可

MIT Copyright (c) [email protected]

More Repositories

1

EasyFlash

Lightweight IoT device information storage solution: KV/IAP/LOG. | 轻量级物联网设备信息存储方案:参数存储、在线升级及日志存储 ,全新一代版本请移步至 https://github.com/armink/FlashDB
C
1,825
star
2

FlashDB

An ultra-lightweight database that supports key-value and time series data | 一款支持 KV 数据和时序数据的超轻量级数据库
C
1,461
star
3

CmBacktrace

Advanced fault backtrace library for ARM Cortex-M series MCU | ARM Cortex-M 系列 MCU 错误追踪库
C
1,452
star
4

FreeModbus_Slave-Master-RTT-STM32

Add master mode to FreeModbus. | 在 FreeModbus 中添加主机模式
C
1,390
star
5

SFUD

An using JEDEC's SFDP standard serial (SPI) flash universal driver library | 一款使用 JEDEC SFDP 标准的串行 (SPI) Flash 通用驱动库
C
1,107
star
6

struct2json

A fast convert library between the JSON and C structure. Implement structure serialization and deserialization for C. | C 结构体与 JSON 快速互转库,快速实现 C 结构体的序列化及反序列化
C
635
star
7

HackSTLinkUpgrade

暴力升级你的 ST-Link 及 STM32CubeIDE
82
star
8

EasyDataManager

A c language advanced framework of data manager. Support static data and dynamic data. Supply easy and simple interface for app.
C
34
star
9

MpyOnRtt

MicroPython port for RT-Thread on STM32F4 board
C
10
star
10

web_terminal

Terminal runs in a Web browser
C
9
star
11

UtestRunner

Utest automated test robot | utest 自动化测试机器人
Python
8
star
12

CmBacktraceFlashLogDemo

The CmBacktrace flash log demo base on Pandora IoT Board | 基于潘多拉 IoT 开发板的 CmBacktrace Flash 日志存储示例
C
7
star
13

EasyFlashAutoTestBSP

自动化测试 EasyFlash 的 RT-Thread BSP
C
6
star
14

FlashDBAutoTestBSP

FlashDB BSP for auto test
C
5
star
15

CharsetConvert

A java implement charset convert tool .Such as hex to utf-8, hex to gbk, utf-8 to hex and gbk to hex.Suitable for use in a network, serial debugging process.
Java
3
star
16

Go_Tutorials

A golang tutorials source code on http://tour.golang.org/. You can import to Eclipse IDE directly.
Go
1
star
17

hello-github-actions

Dockerfile
1
star