超輕量級、高性能 C 日志庫 EasyLogger 正式版發布

jopen 9年前發布 | 13K 次閱讀 EasyLogger

超輕量級、高性能 C 日志庫 EasyLogger V0.08.18 正式版發布!

1、介紹

EasyLogger是一款超輕量級(ROM<1.6K, RAM<0.3K)、高性能的C日志庫,非常適合對資源敏感的軟件項目,例如:IoT產品、可穿戴設備、智能家居等等。相比log4c、zlog這些知名的C日志庫,EasyLogger的功能更加簡單,提供給用戶的接口更少,但上手會很快,更多實用功能支持以插件形式進行動態擴展。

1.1 主要特性

  • 支持用戶自定義輸出方式(例如:終端、文件、數據庫、串口、485、Flash...);

  • 日志內容可包含級別、時間戳、線程信息、進程信息等;

  • 日志輸出被設計為線程安全的方式;

  • 支持多種操作系統(RT-Thread、UCOS、Linux、Windows...),也支持裸機平臺;

  • 日志支持RAW格式;

  • 支持按標簽、級別 、關鍵詞進行動態過濾;

  • 擴展性強,支持以插件形式擴展新功能。

名詞解釋:
1、RAW格式:未經過格式化的原始日志。
2、標簽:在軟件中可以按照文件、模塊、功能等方面,對需要打印的日志設定標簽,實現日志分類。

1.2 插件

  • 1、Flash:使用EasyFlash庫提供的Flash操作接口,可以把日志直接存儲在Flash中。

  • 2、File(正在開發):支持文件轉檔、軟件運行時動態加載配置文件等與文件日志輸出相關功能。

  • 敬請期待……

1.3 Star & Fork

后續我還會提供更多插件。也非常歡迎大家設計、開發更多實用插件和功能,一起來完善EasyLogger (Github|OSChina) 。如果覺得這個開源項目很贊,可以點擊項目主頁右上角的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.3 輸出過濾

支持按照級別、標簽及關鍵詞進行過濾。日志內容較多時,使用過濾功能可以更快定位日志,保證日志的可讀性。更多的過濾功能設置方法及細節請閱讀\docs\zh\api\kernel.md文檔。

2.4 輸出格式

輸出格式支持:級別、時間、標簽、進程信息、線程信息、文件路徑、行號、方法名。每種優先級別可以獨立設置輸出格式。

注:默認為RAW格式,RAW格式日志不支持標簽過濾

2.5 輸出方式

通過用戶的移植,可以支持任何一種輸出方式。只不過對于某種輸出方式可能引入的新功能,需要通過插件實現,例如:文件轉存,檢索Flash日志等等。后期會有更多的插件開源出來。下面簡單對比下部分輸出方式使用場景:

  • 終端:方便用戶動態查看,不具有存儲功能;

  • 文件與Flash:都具有存儲功能,用戶可以查看歷史日志。但是文件方式需要文件系統的支持,而Flash方式更加適合應用在無文件系統的小型嵌入式設備中。

2.6 Demo

2.6.1 核心功能

下圖為在終端中輸入命令來控制日志的輸出及過濾器的設置,更加直觀的展示了EasyLogger核心功能。

  • Demo路徑:\demo\os\rt-thread\stm32f10x\

  • API文檔:\docs\zh\api\kernel.md

  • 移植文檔:\docs\zh\port\kernel.md

超輕量級、高性能 C 日志庫 EasyLogger 正式版發布

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

下圖過程為通過控制臺輸出日志,并將輸出的日志存儲到Flash中。重啟再讀取上次保存的日志,最后清空Flash日志。

  • Demo路徑:\demo\os\rt-thread\stm32f10x\

  • API文檔:\docs\zh\api\flash.md

  • 移植文檔:\docs\zh\port\flash.md

超輕量級、高性能 C 日志庫 EasyLogger 正式版發布

更多WindowsLinux等平臺的Demo,都位于\demo文件夾下。

3、文檔

具體內容參考\docs\zh\下的文件。務必保證在閱讀文檔后再移植使用。

4、后期

  • 1、Flash存儲已完成:在EasyFlash中增加日志存儲、讀取功能,讓EasyLogger與其無縫對接。使日志可以更加容易的存儲在非文件系統中,并具有歷史日檢索的功能;

  • 2、配置文件:文件系統下的配置文件;

  • 3、文件轉檔:文件系統下支持文件按容量轉檔,按時間區分;

  • 4、日志助手:開發跨平臺的日志助手,兼容Linux、Windows、Mac系統,打開助手即可查看、過濾(支持正則表達式)、排序、保存日志等。前端:HTML5+ Bootstrap + AngularJS + NW.js,后端:Rust + iron + rust-websocket + serial-rs

  • 5、異步輸出:目前日志輸出與用戶代碼之間是同步的方式,這種方式雖然軟件簡單,也不存在日志覆蓋的問題。但在輸出速度較低的平臺下,會由于增加日志功能,而降低軟件運行速度。所以后期會增加異步輸出方式,關鍵字過濾也可以放到異步輸出中去;

  • 6、Arduino:增加Arduino lib,并提供其Demo;

5、許可

MIT Copyright (c) armink.ztl@gmail.com

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!