Java日志體系總結(jié)
閱讀本文大概需要 3.5?分鐘。
概要
Log日志體系
commons-logging.jar、log4j.jar、sl4j-api.jar、logback.jar等等,眼花繚亂。我們要正確的配置,使得jar包相互作用生效之前,就先要理清它們之間的關(guān)系。背景/發(fā)展史
log4j(作者Ceki Gülcü)出來時就等到了廣泛的應(yīng)用(注意這里是直接使用),是Java日志事實上的標(biāo)準(zhǔn),并成為了Apache的項目Apache要求把log4j并入到JDK,SUN拒絕,并在jdk1.4版本后增加了 JUL(java.util.logging)畢竟是JDK自帶的,JUL也有很多人用。同時還有其他日志組件,如SimpleLog等。這時如果有人想換成其他日志組件,如log4j換成JUL,因為api完全不同,就需要改動代碼。 Apache見此,開發(fā)了 JCL(Jakarta Commons Logging),即commons-logging-xx.jar。它只提供一套通用的日志接口api,并不提供日志的實現(xiàn)。很好的設(shè)計原則嘛,依賴抽象而非實現(xiàn)。這樣應(yīng)用程序可以在運(yùn)行時選擇自己想要的日志實現(xiàn)組件。這樣看上去也挺美好的,但是log4j的作者覺得JCL不好用,自己開發(fā)出 slf4j,它跟JCL類似,本身不提供日志具體實現(xiàn),只對外提供接口或門面。目的就是為了替代JCL。同時,還開發(fā)出logback,一個比log4j擁有更高性能的組件,目的是為了替代log4j。Apache參考了logback,并做了一系列優(yōu)化,推出了 log4j2
關(guān)系/依賴
JCL
commons-logging已經(jīng)停止更新,最后的狀態(tài)如下所示:
SLF4J

slf4j + logback slf4j-api.jar?+?logback-classic.jar+?logback-core.jarslf4j + log4j slf4j-api.jar?+?slf4j-log4j12.jar?+?log4j.jarslf4j + jul slf4j-api.jar?+?slf4j-jdk14.jar也可以只用slf4j無日志實現(xiàn) slf4j-api.jar?+?slf4j-nop.jar
SLF4J的適配

你在用JCL 使用 jcl-over-slf4j.jar適配你在用log4j 使用 log4j-over-slf4j.jar適配你在用JUL 使用 jul-to-slf4j.jar適配

讓Spring統(tǒng)一輸出
jcl-over-slf4j.jar就好了。我又盜了一個圖來說明
適配思路
你首先確認(rèn)需要統(tǒng)一日志的模塊、框架是使用哪個日志組件的,然后再找到sfl4j的適配器。 記得去掉無用的日志實現(xiàn)組件,只保留你要用的。
常見問題
Failed to load class org.slf4j.impl.StaticLoggerBinder
Multiple bindings
代碼規(guī)范
推薦閱讀:
還在手動啟動SpringBoot項目?Docker部署不香嗎?
微信掃描二維碼,關(guān)注我的公眾號
朕已閱?
評論
圖片
表情

