EasyLogger超輕量級(jí)、高性能 C/C++ 日志庫(kù)
1、介紹
EasyLogger 是一款超輕量級(jí)(ROM
1.1 主要特性
-
支持用戶自定義輸出方式(例如:終端、文件、數(shù)據(jù)庫(kù)、串口、485、Flash...);
-
日志內(nèi)容可包含級(jí)別、時(shí)間戳、線程信息、進(jìn)程信息等;
-
日志輸出被設(shè)計(jì)為線程安全的方式;
-
支持多種操作系統(tǒng)(RT-Thread、UCOS、Linux、Windows...),也支持裸機(jī)平臺(tái);
-
日志支持RAW格式;
-
支持按標(biāo)簽、級(jí)別 、關(guān)鍵詞進(jìn)行動(dòng)態(tài)過(guò)濾;
-
各級(jí)別日志支持不同顏色顯示;
-
擴(kuò)展性強(qiáng),支持以插件形式擴(kuò)展新功能。
名詞解釋:
1、RAW格式:未經(jīng)過(guò)格式化的原始日志。
2、標(biāo)簽:在軟件中可以按照文件、模塊、功能等方面,對(duì)需要打印的日志設(shè)定標(biāo)簽,實(shí)現(xiàn)日志分類。
1.2 插件
-
1、Flash:使用EasyFlash庫(kù)提供的Flash操作接口,可以把日志直接存儲(chǔ)在Flash中。
-
2、File(正在開(kāi)發(fā)):支持文件轉(zhuǎn)檔、軟件運(yùn)行時(shí)動(dòng)態(tài)加載配置文件等與文件日志輸出相關(guān)功能。
-
敬請(qǐng)期待……
1.3 Star & Fork
后續(xù)我還會(huì)提供更多插件。也非常歡迎大家設(shè)計(jì)、開(kāi)發(fā)更多實(shí)用插件和功能,一起來(lái)完善EasyLogger (Github|OSChina) 。如果覺(jué)得這個(gè)開(kāi)源項(xiàng)目很贊,可以點(diǎn)擊項(xiàng)目主頁(yè)右上角的Star,同時(shí)把它推薦給更多有需要的朋友。
2、使用
2.1 參數(shù)配置
EasyLogger擁有過(guò)濾方式、輸出格式、輸出開(kāi)關(guān)這些屬性。
-
過(guò)濾方式支持按照標(biāo)簽、級(jí)別、關(guān)鍵詞進(jìn)行過(guò)濾;
-
可以動(dòng)態(tài)的開(kāi)啟/關(guān)閉日志的輸出;
-
可設(shè)定動(dòng)態(tài)和靜態(tài)的輸出級(jí)別(靜態(tài):一級(jí)開(kāi)關(guān),通過(guò)宏定義;動(dòng)態(tài):二級(jí)開(kāi)關(guān),通過(guò)API接口)。
注:目前參數(shù)配置及輸出方式都是單例模式,即全局只支持一種配置方式。此模式下,軟件會(huì)較為簡(jiǎn)單,但是無(wú)法支持復(fù)雜的輸出方式。
2.2 輸出級(jí)別
參考Android Logcat,級(jí)別最高為0(Assert),最低為5(Verbose)。
0.[A]:斷言(Assert) 1.[E]:錯(cuò)誤(Error) 2.[W]:警告(Warn) 3.[I]:信息(Info) 4.[D]:調(diào)試(Debug) 5.[V]:詳細(xì)(Verbose)
2.2.1 輸出繽紛多彩的日志
各個(gè)級(jí)別日志默認(rèn)顏色效果如下。用戶也可以根據(jù)自己的喜好,在 elog_cfg.h 對(duì)各個(gè)級(jí)別日志的顏色及字體風(fēng)格進(jìn)行單獨(dú)設(shè)置。
2.3 輸出過(guò)濾
支持按照級(jí)別、標(biāo)簽及關(guān)鍵詞進(jìn)行過(guò)濾。日志內(nèi)容較多時(shí),使用過(guò)濾功能可以更快定位日志,保證日志的可讀性。更多的過(guò)濾功能設(shè)置方法及細(xì)節(jié)請(qǐng)閱讀\docs\zh\api\kernel.md文檔。
2.4 輸出格式
輸出格式支持:級(jí)別、時(shí)間、標(biāo)簽、進(jìn)程信息、線程信息、文件路徑、行號(hào)、方法名。每種優(yōu)先級(jí)別可以獨(dú)立設(shè)置輸出格式。
注:默認(rèn)為RAW格式,RAW格式日志不支持標(biāo)簽過(guò)濾
2.5 輸出方式
通過(guò)用戶的移植,可以支持任何一種輸出方式。只不過(guò)對(duì)于某種輸出方式可能引入的新功能,需要通過(guò)插件實(shí)現(xiàn),例如:文件轉(zhuǎn)存,檢索Flash日志等等。后期會(huì)有更多的插件開(kāi)源出來(lái)。下面簡(jiǎn)單對(duì)比下部分輸出方式使用場(chǎng)景:
-
終端:方便用戶動(dòng)態(tài)查看,不具有存儲(chǔ)功能;
-
文件與Flash:都具有存儲(chǔ)功能,用戶可以查看歷史日志。但是文件方式需要文件系統(tǒng)的支持,而Flash方式更加適合應(yīng)用在無(wú)文件系統(tǒng)的小型嵌入式設(shè)備中。
2.6 Demo
2.6.1 核心功能
下圖為在終端中輸入命令來(lái)控制日志的輸出及過(guò)濾器的設(shè)置,更加直觀的展示了EasyLogger核心功能。
-
Demo路徑:\demo\os\rt-thread\stm32f10x\
-
API文檔:\docs\zh\api\kernel.md
-
移植文檔:\docs\zh\port\kernel.md
2.6.2 Flash Log(將日志保存到Flash中)
下圖過(guò)程為通過(guò)控制臺(tái)輸出日志,并將輸出的日志存儲(chǔ)到Flash中。重啟再讀取上次保存的日志,最后清空Flash日志。
-
Demo路徑:\demo\os\rt-thread\stm32f10x\
-
API文檔:\docs\zh\api\flash.md
-
移植文檔:\docs\zh\port\flash.md
更多Windows、Linux等平臺(tái)的Demo,都位于\demo文件夾下。
3、文檔
具體內(nèi)容參考\docs\zh\下的文件。務(wù)必保證在閱讀文檔后再移植使用。
4、后期
-
1、Flash存儲(chǔ)(已完成):在EasyFlash中增加日志存儲(chǔ)、讀取功能,讓EasyLogger與其無(wú)縫對(duì)接。使日志可以更加容易的存儲(chǔ)在非文件系統(tǒng)中,并具有歷史日檢索的功能;
-
2、配置文件:文件系統(tǒng)下的配置文件;
-
3、文件轉(zhuǎn)檔:文件系統(tǒng)下支持文件按容量轉(zhuǎn)檔,按時(shí)間區(qū)分;
-
4、日志助手:開(kāi)發(fā)跨平臺(tái)的日志助手,兼容Linux、Windows、Mac系統(tǒng),打開(kāi)助手即可查看、過(guò)濾(支持正則表達(dá)式)、排序、保存日志等。前端:HTML5+ Bootstrap + AngularJS + NW.js,后端:Rust + iron + rust-websocket + serial-rs;
-
5、異步輸出(已完成):目前日志輸出與用戶代碼之間是同步的方式,這種方式雖然軟件簡(jiǎn)單,也不存在日志覆蓋的問(wèn)題。但在輸出速度較低的平臺(tái)下,會(huì)由于增加日志功能,而降低軟件運(yùn)行速度。所以后期會(huì)增加異步輸出方式,關(guān)鍵字過(guò)濾也可以放到異步輸出中去;
-
6、Arduino:增加Arduino lib,并提供其Demo;
5、許可
MIT Copyright (c) [email protected]
