日誌組件三:日誌接口與日誌實現框架

  前面介紹了log4j和log4j2這兩種日誌的實現,可是在具體使用中,它們通常不會單獨出現,而是與日誌門面結合使用;可是在咱們衆多的業務系統中,因爲開發者或者團隊不一樣,日誌實現與日誌接口的選型也是五花八門,這篇文章就是來整理下日誌實現與日誌框架之間的組合。主要參考:https://my.oschina.net/pingpangkuangmo/blog/406618java

 

1、日誌組件概念

兩種日誌接口:commons-logging、slf4japache

四種日誌實現:logging,log4j一、log4j二、logback編程

一、日誌接口的做用

  目前一統江湖的就是apache的commons-logging和slf4j,他兩的做用就是提供統一的接口,而具體的日誌實現交給底層綁定的具體的日誌實現框架。這樣一來,咱們的業務系統中能夠靈活的更換不一樣的日誌實現,而且能夠不須要去改動代碼。api

  對於開發者而言,每種日誌都有不一樣的寫法。若是咱們以實際的日誌框架來進行編寫,代碼就限制死了,以後就很難再更換日誌系統,很難作到無縫切換。框架

二、jar包的對應:

logging:jdk自帶的日誌實現,簡稱jul(java-util-logging)
spa

log4j1:log4j.net

log4j2:log4j-api(定義的api)、log4j-core(api的實現)3d

logback:logback-core(logback的核心包)、logback-classic(logback實現了slf4j的API)日誌

commons-logging簡稱jclblog

         commons-logging(commons-logging的原生所有內容)

         log4j-jcl(commons-logging到log4j2的橋樑)

         jcl-over-slf4j(commons-logging到slf4j橋樑)

slf4j:這個框架比較複雜,在整個日誌組件中起到了一箇中轉站的做用

a、使用slf4j的api編程,底層用其餘具體的實現:

slf4j-jdk14:slf4j到jdk-logging的橋樑

slf4j-log4j12:slf4j到log4j1的橋樑

log4j-slf4j-impl:slf4j到log4j2的橋樑

logback-classic:slf4j到logback的橋樑

slf4j-jcl:slf4j到commons-logging的橋樑

b、如使用log4j的api編程,但最終輸出經過logback來實現,這樣的話就必須先將log4j轉交給slf4j,再經過slf4j轉交給logback

jul-to-slf4j:jdk-logging到slf4j的橋樑

log4j-over-slf4j:log4j1到slf4j的橋樑

jcl-over-slf4j:commons-logging到slf4j的橋樑

2、組件集成

集成這塊的業務代碼中打印日誌都是統一的格式,這也是日誌接口爲咱們帶來的便利,因此打印日誌不進行介紹,主要是不一樣組合之間的jar包依賴,咱們重點觀察pom文件的配置

一、log4j

二、log4j2

三、logback

這裏出現了slf4j相關的jar包,其實logback官網的使用方式,就是和slf4j集成起來的,Logger、LoggerFactory都是slf4j的接口和類

四、commons-logging與jul集成

 

五、commons-logging與log4j1集成

六、commons-logging與log4j2集成

 

七、commons-logging與logback集成

八、slf4j與jdk-logging集成

九、slf4j與log4j1集成

十、slf4j與log4j2集成

 

十一、slf4j與logback集成

 

3、jar包衝突說明

一、jul-to-slf4j與slf4j-jdk14衝突

jul-to-slf4j: jdk-logging切換到slf4j

slf4j-jdk14:slf4j切換到jdk-logging

二、log4j-over-slf4j與slf4j-log4j12衝突

log4j-over-slf4j:log4j1切換到slf4j

slf4j-log4j12:slf4j切換到log4j1

三、jcl-over-slf4j與slf4j-jcl衝突

jcl-over-slf4j:commons-logging切換到slf4j

slf4j-jcl:slf4j切換到commons-logging  

相關文章
相關標籤/搜索