關(guān)于 slf4j 和 log4j 使用上的一些體驗(yàn)

工作中的問題

項(xiàng)目中使用的log4j2, 引入了同事寫的依賴包,使用的是slf4j搭配log4j。測(cè)試時(shí)發(fā)現(xiàn),原本程序中的log正常出現(xiàn),但依賴包里的log完全沒有,于是稍微學(xué)習(xí)了一下 slf4j 的知識(shí)。

圖片轉(zhuǎn)自 https://unsplash.com

slf4j的綁定

slf4j的好處一搜一大堆。總的來說,它是各種log工具的具體實(shí)現(xiàn)上面的一個(gè)抽象層。用抽象層的好處就是可以解耦合。

既然slf4j本身只是抽象層,它自己并不對(duì)log功能進(jìn)行實(shí)現(xiàn),這就意味著它必須和一個(gè)負(fù)責(zé)實(shí)現(xiàn)的log工具搭配使用。在我們的項(xiàng)目中使用的是log4j

和同組的同事溝通之后發(fā)現(xiàn),原來我們的主程序使用的log工具最近從log4j升級(jí)到了log4j2,設(shè)置文件也從log4j.properties變成了log4j2.properties

檢查程序的啟動(dòng)log,又發(fā)現(xiàn)了如下WARNING:

SLF4J: Class path contains multiple SLF4J bindings.

log4j和log4j2同時(shí)出現(xiàn)在了程序的依賴中,顯然這就是問題所在了。

于是我打開IntelliJ的依賴圖生成工具,將原本包含在依賴包中的slf4j-log4j12刪除掉。再加上對(duì)應(yīng)版本的slf4jlog4j12之間的binding依賴。問題順利解決。

在這個(gè)例子中我們也可以發(fā)現(xiàn)使用slf4j的好處。在主程序已經(jīng)升級(jí)到log4j2的情況下,依賴包的代碼完全不需要進(jìn)行更改,只需要對(duì)maven的pom文件進(jìn)行修改,就可以順利使用主程序的log工具。如果依賴包中直接使用的是log4j的實(shí)現(xiàn)的話,我們恐怕不得不在 同時(shí)在主程序中使用兩個(gè)log工具對(duì)依賴包的代碼進(jìn)行修改 之間選擇其一了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,991評(píng)論 19 139
  • 歷史 log4j可以當(dāng)之無愧地說是Java日志框架的元老,1999年發(fā)布首個(gè)版本,2012年發(fā)布最后一個(gè)版本,20...
    kelgon閱讀 10,190評(píng)論 3 53
  • 前言 最近學(xué)習(xí)開java web服務(wù)器開發(fā),開始學(xué)習(xí)java,處理業(yè)務(wù)邏輯,但對(duì)其中的日志比較好奇,之前沒怎么接觸...
    九風(fēng)萍舟閱讀 3,318評(píng)論 1 6
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,971評(píng)論 6 342
  • spring官方文檔:http://docs.spring.io/spring/docs/current/spri...
    牛馬風(fēng)情閱讀 1,732評(píng)論 0 3