Spring MVC集成slf4j-logback


轉自: Spring MVC集成slf4j-logback

 

 

1.  Spring MVC集成slf4j-log4j

關於slf4j和log4j的相關介紹和用法,網上有很多文章可供參考,但是關於logback的,尤其是spring MVC集成logback的,就相對少一些了,而且其中一些也有着這樣那樣的問題。進入正題之前先簡單介紹下Spring MVC集成slf4j-log4j的過程,如下:

1)      在pom.xml文件中添加slf4j-log4j的依賴,完成后的classpath中將新增三個jar包,分別是:slf4j-api.jar、log4j.jar及slf4j-log4j.jar

2)      在當前classpath中添加log4j.properties配置文件,按照log4j的參數語法編寫該文件

3)      以上兩步完成后,普通的Java項目就能使用slf4j-log4j進行日志處理了;對於Java Web項目,還需要在web.xml文件中配置Log4jConfigLocation和Log4jConfigListener

2.  log4j與logback簡要比較

本文意在闡述用logback替代log4j作為Spring MVC項目的日志處理組件。這兩者雖然作者相同,但log4j早已被托管給Apache基金會維護,並且自從2012年5月之后就沒有更新了。而logback從出生開始就是其作者奔着取代log4j的目的開發的,因此一方面logback繼承了log4j大量的用法,使得學習和遷移的成本不高,另一方面logback在性能上要明顯優於log4j,尤其是在大量並發的環境下,並且新增了一些log4j所沒有的功能(如將日志文件壓縮成zip包等)

3.  Spring MVC集成slf4j-logback

3.1.      添加依賴

<dependency>  
    <groupId>ch.qos.logback</groupId>  
    <artifactId>logback-classic</artifactId>  
    <version>1.1.3</version>  
</dependency>  
<dependency>  
    <groupId>org.logback-extensions</groupId>  
    <artifactId>logback-ext-spring</artifactId>  
    <version>0.1.2</version>  
</dependency>  
<dependency>  
    <groupId>org.slf4j</groupId>  
    <artifactId>jcl-over-slf4j</artifactId>  
    <version>1.7.12</version>  
</dependency> 

 

如上所示是集成所需要的依賴,其中:

第一個logback-classic包含了logback本身所需的slf4j-api.jar、logback-core.jar及logback-classsic.jar

第二個logback-ext-spring是由官方提供的對Spring的支持,它的作用就相當於log4j中的Log4jConfigListener;這個listener,網上大多都是用的自己實現的,原因在於這個插件似乎並沒有出現在官方文檔的顯要位置導致大多數人並不知道它的存在

第三個jcl-over-slf4j是用來把Spring源代碼中大量使用到的commons-logging替換成slf4j,只有在添加了這個依賴之后才能看到Spring框架本身打印的日志,否則只能看到開發者自己打印的日志

3.2.      編寫logback.xml

logback與log4j一樣,也需要在classpath中編寫配置文件。但logback配置文件似乎比log4j復雜一些:log4j不僅支持xml格式的配置文件,還支持properties格式的,而logback只支持xml格式的。好在官方提供了一個在線工具,可以將log4j的properties文件直接轉換成logback的xml文件,地址如下:

http://logback.qos.ch/translator/

logback的詳細用法及其xml文件的相關語法,可參見它的用戶向導,地址如下:

http://logback.qos.ch/manual/introduction.html

3.3.      配置web.xml

與log4j類似,logback集成到Spring MVC項目中,也需要在web.xml中進行配置,同樣也是配置一個config location和一個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> 

 

其中LogbackConfigListener由前述的logback-ext-spring依賴提供,若不依賴它則找不到這個listener類

4.  其它

從上面可以看出,slf4j-log4j和slf4j-logback集成到Spring MVC(或推廣到其它Java Web項目中)的步驟大體是相同的。集成完畢后,就可以通過slf4j提供的API隱藏掉logback(或log4j)的具體實現,直接進行日志處理了

使用slf4j-api的時候,需要注意的是:slf4j采用了單例模式,項目中創建的每一個Logger實例都會按你傳入的name(傳入的Class<?>實例也會被轉換成String型的name)保存到一個靜態的ConcurrentHashMap中;因此只要name(或Class<?>實例)相同,每次返回的實際上都是同一個Logger實例。因此完全沒必要把Logger實例作為常量或靜態成員,隨用隨取即可。實際上,其作者也不建議那么做


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM