日志門面
- Apache Commons Logging (之前叫 Jakarta Commons Logging,JCL)
當(dāng)程序規(guī)模越來(lái)越龐大時(shí),JCL的動(dòng)態(tài)綁定并不是總能成功,在Sping官方文檔中Not Using Commons Logging小節(jié)也提到因?yàn)樗惴▎?wèn)題引起。 - SLF4J
-
SLF4J解決了JCL動(dòng)態(tài)綁定引發(fā)的問(wèn)題,SLF4J在程序部署時(shí)靜態(tài)綁定指定的日志工具宫仗。
SLF4J綁定各類日志框架的原理圖.png -
排除現(xiàn)有Apache Commons Logging依賴的影響
現(xiàn)在還有一個(gè)問(wèn)題,假如你正在開發(fā)應(yīng)用程序所調(diào)用的組件當(dāng)中已經(jīng)使用了 JCL 的旁仿,還有一些組建可能直接調(diào)用了 java.util.logging藕夫,這時(shí)你需要一個(gè)橋接器(名字為 XXX-over-slf4j.jar)把他們的日志輸出重定向到 SLF4J。
SLF4J的橋接器.png
所謂的橋接器就是一個(gè)假的日志實(shí)現(xiàn)工具枯冈,比如當(dāng)你把 jcl-over-slf4j.jar 放到 CLASS_PATH 時(shí)毅贮,即使某個(gè)組件原本是通過(guò) JCL 輸出日志的,現(xiàn)在卻會(huì)被 jcl-over-slf4j “騙到”SLF4J 里尘奏,然后 SLF4J 又會(huì)根據(jù)綁定器把日志交給具體的日志實(shí)現(xiàn)工具滩褥。
過(guò)程如下:
Component(服務(wù)) -> log to Apache Commons Logging(JCL) -> jcl-over-slf4j.jar — (redirect) —> SLF4j —> slf4j-log4j12-version.jar —> log4j.jar —> 輸出日志
-
注意:如果使用了log4j實(shí)現(xiàn)slf4j,添加log4j-over-slf4j橋接器炫加,結(jié)果就是log4j —> slf4j —> log4j瑰煎,輸出日志命令被踢來(lái)踢去,此時(shí)要么去掉log4j-over-slf4j橋接器俗孝,要么替換slf4j的實(shí)現(xiàn)酒甸,比如換成logback,否則陷入死循環(huán)赋铝。