|
日志系統(tǒng)在系統(tǒng)開發(fā)和調(diào)整過程中的重要性,想必大家應(yīng)該都清楚。特別是項(xiàng)目出問題之后,卻沒有日志可以幫忙定位問題,就非常令人痛苦。 因?yàn)槲覀儾豢赡芤恢蓖ㄟ^調(diào)試器去單步調(diào)試程序,所以設(shè)備的運(yùn)行日志顯得尤為重要。 通常我們對日志有這些要求: - 不同的日志級別(
Debug,Warning, Info, Error, Fatal);
以上是比較基本的功能,但是在嵌入式設(shè)備中,有的時(shí)候我們希望可以保存設(shè)備的運(yùn)行日志,我們需要以下的一些功能; - 支持多種訪問方式,比如串口終端,保存到嵌入式文件系統(tǒng)中;
- 支持shell命令行通過串口終端進(jìn)行訪問;
以上這些需求不一定會(huì)全部實(shí)現(xiàn)。 除了常用的log4c,log4cpp,下面給大家推薦3個(gè)非常不錯(cuò)的開源日志庫,比較適合用在單片機(jī)的項(xiàng)目中。從開始的輕量,到后面的功能豐富,最后一個(gè)很強(qiáng)大,所以請耐心看到最后。 rxi_log項(xiàng)目地址:https://github.com/rxi/log.c 基于 C99 實(shí)現(xiàn)的簡單日志庫,具體輸出如下所示; image-20211204142024466具體用法 將源碼中的log.c和log.h集成到你的項(xiàng)目中即可,需要打印日志的話,調(diào)用下面的API即可,如下所示; log_trace(const char *fmt, ...); log_debug(const char *fmt, ...); log_info(const char *fmt, ...); log_warn(const char *fmt, ...); log_error(const char *fmt, ...); log_fatal(const char *fmt, ...);
除了這些API,還有log_set_quiet,log_set_lock,LOG_USE_COLOR等等,詳情請看原項(xiàng)目。 ulog項(xiàng)目地址:https://github.com/rdpoor/ulog uLog 為嵌入式微控制器或任何資源有限的系統(tǒng)提供結(jié)構(gòu)化的日志記錄機(jī)制。它繼承了流行的 Log4c 和 Log4j 平臺背后的一些概念,但開銷更低。 uLog 的一些特點(diǎn): - uLog 易于集成到幾乎任何環(huán)境中,由一個(gè)頭文件和一個(gè)源文件組成,并且是用純 C 編寫的。
- uLog 提供熟悉的嚴(yán)重級別(CRITICAL、ERROR、WARNING、INFO、DEBUG、TRACE)。
- uLog 支持多個(gè)用戶定義的輸出(控制臺、日志文件、內(nèi)存緩沖區(qū)等),每個(gè)輸出都有自己的報(bào)告閾值級別。
- uLog 是具有最小依賴性的“積極獨(dú)立”,僅需要 stdio.h、string.h 和 stdarg.h。
- 當(dāng)您不使用 uLog 時(shí),它不會(huì)妨礙您:如果 ULOG_ENABLED 在編譯時(shí)未定義,則不會(huì)生成日志記錄代碼。
- uLog 已經(jīng)過很好的測試。有關(guān)詳細(xì)信息,請參閱隨附的 ulog_test.c 文件。
color codingEasyLogger項(xiàng)目地址:https://github.com/armink/EasyLogger TextColor這個(gè)項(xiàng)目我用了很長時(shí)間,強(qiáng)烈推薦,是RT-Thread大佬的作品,已經(jīng)集成到RTOS的內(nèi)部了,支持的功能非常豐富,基本滿足各種開發(fā)的需求。 特點(diǎn)如下: - 支持多種訪問模式(例如:終端、文件、數(shù)據(jù)庫、串口、485、Flash...);
- 日志內(nèi)容可包含級別、時(shí)間戳、線程信息、進(jìn)程信息等;
- 支持多種操作系統(tǒng)(RT-Thread、UCOS、Linux、Windows...),也支持裸機(jī)平臺;
- 支持按 標(biāo)簽 、 級別 、 關(guān)鍵詞 進(jìn)行動(dòng)態(tài)過濾;
- 擴(kuò)展性強(qiáng),支持以插件形式擴(kuò)展新功能。
以上只是這個(gè)項(xiàng)目的其中一部分,具體可以參考項(xiàng)目地址。 summary希望大家在平常的開發(fā)中,重視日志的使用,每一個(gè)開發(fā)階段設(shè)置不同級別的日志,不同的模塊也分別設(shè)置模塊的日志,這樣方便定位出現(xiàn)一些問題,快速解決,提高效率。
|