Slf4j+Logback 整合及排包

一. 整合核心包

1.1 門面

Slf4j 基本的日志門面,核心API:org.slf4j:slf4j-api

1.2 核心實(shí)現(xiàn)

logback的核心實(shí)現(xiàn)層在ch.qos.logback:logback-core中

1.3 適配

logback針對Slf4j的適配層 ch.qos.logback:logback-classic

logback-classic會直接依賴其他兩項(xiàng),且一定是依賴能夠支持的最合適版本,所以顯式依賴logback-classic即可。

二. 基于依賴兼容

2.1 Slf4j 與JDK

Slf4j 2.0.x有不小的改動,不再主動查找org.slf4j.impl.StaticLoggerBinder,而是改用JDK ServiceLoader(也就是SPI,Service Provider Interface) 的方式來加載實(shí)現(xiàn)。這是JDK 8中的特性.


24年6月

2.2. logback 與slf4j和JDK

24-6

2.3 小結(jié)

如果使用JDK 8,建議選擇Slf4j 2.0 + Logback 1.3;
如果使用JDK 11及以上,建議選擇Slf4j 2.0 + Logback 1.5

三. SpringBoot 兼容

Spring Boot通過spring-boot-starter-logging包直接依賴了Logback(然后再間接依賴了 Slf4j),它通過org.springframework.boot.logging.LoggingSystem查找日志接口并自動適配,所以我們使用Spring Boot時一般并不需要關(guān)心日志依賴,只管使用即可.


四. 橋接

實(shí)際項(xiàng)目中我們依賴的其他二方,三方包中可能使用JCL/Log4j/Log4j2/JUL其他日志框架,為了使其能夠正常打印日志,舊需要做好橋接。
org.slf4j:jcl-over-slf4j
org.slf4j:log4j-over-slf4j
org.slf4j:jul-to-slf4j
org.apache.logging.log4j:log4j-to-slf4j log4j2 橋接到Slf4j

五. Maven排包

  1. 將要排掉的包通過引入一個占位的空包(版本號一般比較特殊,比如999-not-exist),從而達(dá)到排包的目的。但這種特殊版本的空包一般在Mvnrepository Central倉庫是沒有的(各廠的私有倉庫一般會有這種包),你可以自己搭建私有倉庫并上傳這個版本,或者使用Version 99 Does Not Exist [16]也行。這是最完美的方案,無論本地運(yùn)行還是遠(yuǎn)程編譯都不會有問題。
  2. 將需要排掉的包使用<scope>provided</scope>標(biāo)識,這樣這個包在編譯時會被跳過,從而達(dá)到排包的目的,但此包在本地運(yùn)行時仍會被引入,導(dǎo)致本地運(yùn)行與遠(yuǎn)程機(jī)器環(huán)境差異,不利于調(diào)試
  3. 使用maven-enforcer-plugin[17]插件標(biāo)識哪些包是要被排掉的,它只是一個校驗(yàn),實(shí)際上你仍然需要在每個引入了錯誤包的依賴中進(jìn)行排除

https://mp.weixin.qq.com/s/jABbG4MKvEiWXwdYwUk8SA

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容