log4j不打日志问题之解决方案(一)
日志是應(yīng)用軟件中不可缺少的部分,Apache的開源項(xiàng)目log4j是一個(gè)功能強(qiáng)大的日志組件,提供方便的日志記錄。在使用log4j的時(shí)候,難免會(huì)遇到各種問題;下面介紹一下,使用log4j不打印日志情況的排查。
首先,在使用log4j的時(shí)候,必須的jar包。
- commons-logging-1.2.jar
- log4j-1.2.17.jar
- slf4j-log4j12-1.7.21.jar
- slf4j-api-1.6.4.jar
如果發(fā)現(xiàn)沒有日志的打印,首先看一下是否缺少jar包。
舉例:
由于缺少jar包導(dǎo)致的
<dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.7.21</version> </dependency>下面介紹一下 slf4j-api、slf4j-log4j12以及l(fā)og4j之間什么關(guān)系?
幾乎在每個(gè)jar包里都可以看到log4j的身影,在多個(gè)子工程構(gòu)成項(xiàng)目中,slf4j相關(guān)的沖突時(shí)不時(shí)就跳出來讓你不爽,那么slf4j-api、slf4j-log4j12還有l(wèi)og4j他們是什么關(guān)系?我把自己了解的和大家簡單分享一下:
slf4j: Simple Logging Facade for Java,為java提供的簡單日志Facade。Facade:門面,更底層一點(diǎn)說就是接口。他允許用戶以自己的喜好,在工程中通過slf4j接入不同的日志系統(tǒng)。更直觀一點(diǎn),slf4j是個(gè)數(shù)據(jù)線,一端嵌入程序,另一端鏈接日志系統(tǒng),從而實(shí)現(xiàn)將程序中的信息導(dǎo)入到日志系統(tǒng)并記錄。
因此,slf4j入口就是眾多接口的集合,他不負(fù)責(zé)具體的日志實(shí)現(xiàn),只在編譯時(shí)負(fù)責(zé)尋找合適的日志系統(tǒng)進(jìn)行綁定。具體有哪些接口,全部都定義在slf4j-api中。查看slf4j-api源碼就可以發(fā)現(xiàn),里面除了public final class LoggerFactory類之外,都是接口定義。因此,slf4j-api本質(zhì)就是一個(gè)接口定義。
下圖比較清晰的描述了他們之間的關(guān)系:
slf4j-log4j12:鏈接slf4j-api和log4j中間的適配器。它實(shí)現(xiàn)了slf4j-api中StaticLoggerBinder接口,從而使得在編譯時(shí)綁定的是slf4j-log4j12的getSingleton()方法
log4j:這個(gè)是具體的日志系統(tǒng)。通過slf4j-log4j12初始化Log4j,達(dá)到最終日志的輸出。
總結(jié)
以上是生活随笔為你收集整理的log4j不打日志问题之解决方案(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小米组织架构调整:成立技术委员会 强化技
- 下一篇: 计算机用户不设置密码,笔记本电脑密码设置