javascript
Spring MVC集成slf4j-logback
轉(zhuǎn)自:?Spring MVC集成slf4j-logback
?
?
1.? Spring MVC集成slf4j-log4j
關(guān)于slf4j和log4j的相關(guān)介紹和用法,網(wǎng)上有很多文章可供參考,但是關(guān)于logback的,尤其是spring?MVC集成logback的,就相對(duì)少一些了,而且其中一些也有著這樣那樣的問(wèn)題。進(jìn)入正題之前先簡(jiǎn)單介紹下Spring MVC集成slf4j-log4j的過(guò)程,如下:
1)??????在pom.xml文件中添加slf4j-log4j的依賴,完成后的classpath中將新增三個(gè)jar包,分別是:slf4j-api.jar、log4j.jar及slf4j-log4j.jar
2)??????在當(dāng)前classpath中添加log4j.properties配置文件,按照l(shuí)og4j的參數(shù)語(yǔ)法編寫(xiě)該文件
3)??????以上兩步完成后,普通的Java項(xiàng)目就能使用slf4j-log4j進(jìn)行日志處理了;對(duì)于Java Web項(xiàng)目,還需要在web.xml文件中配置Log4jConfigLocation和Log4jConfigListener
2.? log4j與logback簡(jiǎn)要比較
本文意在闡述用logback替代log4j作為Spring MVC項(xiàng)目的日志處理組件。這兩者雖然作者相同,但log4j早已被托管給Apache基金會(huì)維護(hù),并且自從2012年5月之后就沒(méi)有更新了。而logback從出生開(kāi)始就是其作者奔著取代log4j的目的開(kāi)發(fā)的,因此一方面logback繼承了log4j大量的用法,使得學(xué)習(xí)和遷移的成本不高,另一方面logback在性能上要明顯優(yōu)于log4j,尤其是在大量并發(fā)的環(huán)境下,并且新增了一些log4j所沒(méi)有的功能(如將日志文件壓縮成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>?
如上所示是集成所需要的依賴,其中:
第一個(gè)logback-classic包含了logback本身所需的slf4j-api.jar、logback-core.jar及l(fā)ogback-classsic.jar
第二個(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ā)者自己打印的日志
3.2.??????編寫(xiě)logback.xml
logback與log4j一樣,也需要在classpath中編寫(xiě)配置文件。但logback配置文件似乎比log4j復(fù)雜一些:log4j不僅支持xml格式的配置文件,還支持properties格式的,而logback只支持xml格式的。好在官方提供了一個(gè)在線工具,可以將log4j的properties文件直接轉(zhuǎn)換成logback的xml文件,地址如下:
http://logback.qos.ch/translator/
logback的詳細(xì)用法及其xml文件的相關(guān)語(yǔ)法,可參見(jiàn)它的用戶向?qū)?#xff0c;地址如下:
http://logback.qos.ch/manual/introduction.html
3.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>?
其中LogbackConfigListener由前述的logback-ext-spring依賴提供,若不依賴它則找不到這個(gè)listener類
4.? 其它
從上面可以看出,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í)際上,其作者也不建議那么做
轉(zhuǎn)載于:https://www.cnblogs.com/drizzlewithwind/p/6043944.html
總結(jié)
以上是生活随笔為你收集整理的Spring MVC集成slf4j-logback的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 领域模型(domain model)贫血
- 下一篇: 《JS权威指南学习总结--9.5 类和类