Spring MVC集成slf4j-logback

1、添加依賴

<dependency>  
    <groupId>ch.qos.logback</groupId>  
    <artifactId>logback-classic</artifactId>  
    <version>1.2.3</version>  
</dependency>  
<dependency>  
    <groupId>org.logback-extensions</groupId>  
    <artifactId>logback-ext-spring</artifactId>  
    <version>0.1.4</version>  
</dependency>  
<dependency>  
    <groupId>org.slf4j</groupId>  
    <artifactId>jcl-over-slf4j</artifactId>  
    <version>1.7.25</version>  
</dependency>  

如上所示是集成所需要的依賴,其中:
第一個(gè)logback-classic已經(jīng)包含了logback本身所需的slf4j-api.jar、logback-core.jar及l(fā)ogback-classsic.jar,我們不用再寫(xiě)slf4j-api和logback-core的依賴,當(dāng)然寫(xiě)了,maven也會(huì)幫我們做處理



image.png

第二個(gè)logback-ext-spring是由官方提供的對(duì)Spring的支持,它的作用就相當(dāng)于log4j中的Log4jConfigListener;這個(gè)listener,網(wǎng)上大多都是用的自己實(shí)現(xiàn)的,原因在于這個(gè)插件似乎并沒(méi)有出現(xiàn)在官方文檔的顯要位置導(dǎo)致大多數(shù)人并不知道它的存在
第三個(gè)jcl-over-slf4j是用來(lái)把Spring源代碼中大量使用到的commons-logging替換成slf4j,只有在添加了這個(gè)依賴之后才能看到Spring框架本身打印的日志,否則只能看到開(kāi)發(fā)者自己打印的日志

2、編寫(xiě)logback.xml

可以參考一下上一篇文章《maven項(xiàng)目中使用logback+slf4j》的配置
有空的話還是看看官方文檔吧,,里面有詳細(xì)用法及其xml文件的相關(guān)語(yǔ)法,可參見(jiàn)它的用戶向?qū)?/p>

3、配置web.xml

與log4j類似,logback集成到Spring MVC項(xiàng)目中,也需要在web.xml中進(jìn)行配置,同樣也是配置一個(gè)config location和一個(gè)config listener,如下所示:

<context-param>  
         <param-name>logbackConfigLocation</param-name>  
         <param-value>classpath:logback.xml</param-value>  
</context-param>  
<listener>  
         <listener-class>ch.qos.logback.ext.spring.web.LogbackConfigListener</listener-class>  
</listener>  

4、Run as 運(yùn)行web項(xiàng)目,就可以看到生成的日志

其中LogbackConfigListener由前述的logback-ext-spring依賴提供,如果沒(méi)有添加這個(gè)依賴則找不到這個(gè)listener類

總結(jié)

從上面可以看出,slf4j-log4j和slf4j-logback集成到Spring MVC(或推廣到其它Java Web項(xiàng)目中)的步驟大體是相同的。集成完畢后,就可以通過(guò)slf4j提供的API隱藏掉logback(或log4j)的具體實(shí)現(xiàn),直接進(jìn)行日志處理了
使用slf4j-api的時(shí)候,需要注意的是:slf4j采用了單例模式,項(xiàng)目中創(chuàng)建的每一個(gè)Logger實(shí)例都會(huì)按你傳入的name(傳入的Class<?>實(shí)例也會(huì)被轉(zhuǎn)換成String型的name)保存到一個(gè)靜態(tài)的ConcurrentHashMap中;因此只要name(或Class<?>實(shí)例)相同,每次返回的實(shí)際上都是同一個(gè)Logger實(shí)例。因此完全沒(méi)必要把Logger實(shí)例作為常量或靜態(tài)成員,隨用隨取即可。實(shí)際上,其作者也不建議那么做

參考文章

http://blog.csdn.net/sadfishsc/article/details/47160213

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容