工作5年,竟然還沒搞懂Java日志體系!
點擊上方?泥瓦匠 關(guān)注我!
# 概要
# Log日志體系
# 背景/發(fā)展史
log4j(作者Ceki Gülcü)出來時就等到了廣泛的應(yīng)用(注意這里是直接使用),是Java日志事實上的標準,并成為了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)用程序可以在運行時選擇自己想要的日志實現(xiàn)組件。
這樣看上去也挺美好的,但是log4j的作者覺得JCL不好用,自己開發(fā)出slf4j,它跟JCL類似,本身不替供日志具體實現(xiàn),只對外提供接口或門面。目的就是為了替代JCL。同時,還開發(fā)出logback,一個比log4j擁有更高性能的組件,目的是為了替代log4j。
Apache參考了logback,并做了一系列優(yōu)化,推出了log4j2
# 關(guān)系/依賴
JCL

SLF4J

slf4j + logbackslf4j-api.jar + logback-classic.jar + logback-core.jar slf4j + log4jslf4j-api.jar + slf4j-log4j12.jar + log4j.jar slf4j + julslf4j-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)一輸出

# 適配思路
# 常見問題
Failed to load class org.slf4j.impl.StaticLoggerBinder
Multiple bindings
# 代碼規(guī)范
import org.slf4j.Logger;import org.slf4j.LoggerFactory;private static final Logger logger = LoggerFactory.getLogger(Abc.class);
# 總結(jié)
往期推薦

下方二維碼關(guān)注我

技術(shù)草根,堅持分享?編程,算法,架構(gòu)
評論
圖片
表情
