那些年趟過的坑—log4j和slf4j-api衝突

之前接觸過一個springmvc框架,使用的是log4j配置日誌;但是Apache Active MQ依賴的是另一個日誌類庫,在引入slf4j-api後項目中sql不打印了,但是在一個項目中排查問題要知道參數和sql這個是最快的便捷方法,查過好多資料很亂,經過多次配置嘗試解決了這個衝突;

1.我們先來了解一下slf4j

slf4j不同於其他日誌類庫,與其他日誌類庫有很大區別,slf4j(Simple logging Facade for Java)不是一個真正的日誌實現而是一個抽象層(abstraction layer),它允許你在後臺使用任意一個日誌類庫。

如果一個項目總已經使用log4J,而你加載了一個類庫,如:Apache Active MQ 依賴的是另一個日誌類庫logback,那麼需要加載,但是Apache Active MQ使用的是slf4j,可以繼續使用原來定的日誌類庫無需維護新的日誌框架;

總體來說,slf4j使代碼獨立於任意一個特定的日誌api,雖然抽象日誌類庫在程序員思想中已經不是新鮮,而且Apache commons logging 都已經使用這種思想,現在slf4j在項目中是最爲頻繁出現,成爲一種日誌標誌;

2.slf4j對比log4j logback java.util.Logging

slf4j日誌主要是使得程序獨立於任何特定的日誌類庫,依賴於特定類庫可能需要不同配置,並且導致維護麻煩;slf4j api具有佔位符(pace holder),在代碼中表示{};佔位符是一個類似String,format()的%s;會在運行時被某個提供的實際字符所替換,降低代碼總字符串連接次數可節省新建String對象;


接下來爲我們言歸正傳解決我的問題,

1.導入依賴jar包

slf4j-api-1.6.6.jar slf4j-log4j12-1.7.5.jar slf4j-simple-1.7.7.jar

然後在web.xml添加如下:

<!-- log4j配置,文件路徑,因爲是跟隨項目啓動 -->
<context-param>
	<param-name>log4jConfigLocation</param-name>
	<param-value>classpath:log4j.xml</param-value>
</context-param>

<!-- 加載log4j配置文件 -->
<listener>
	<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
就是這麼簡單,有問題可以留言溝通哦!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章