SLF4J的靜態繫結
阿新 • • 發佈:2020-10-22
SLF4j是Apache Common Logging的代替者。
Apache Common Logging使用的是動態繫結來確定具體日誌庫,在執行時從classpath中尋找可用的具體日誌庫,這樣會產生很多classloader和classpath相關的問題,而且很難排查。
和Apache Common Logging不同,SLF4j採用了靜態繫結來確定具體日誌庫。靜態繫結就是為每一個具體的日誌庫寫一個包名和類名都相同類:org.slf4j.impl.StaticLoggerBinder,這個類的功能就是呼叫具體的日誌庫。這個類會存放在Adaptation layer或者native implementation of slf4j-api的jar包中。SLF4j的使用者只要把具體日誌庫對應的Adaptation layer或者native implementation of slf4j-api的jar包放入classpath中,SLF4j便會裝載(load)對應版本的org.slf4j.impl. StaticLoggerBinder,從而呼叫具體的日誌庫。
下圖是呼叫關係圖
下圖是從SLF4j官網(http://www.slf4j.org/manual.html)擷取的架構圖,紅框中是我標註的每個jar包中和繫結有關的關鍵類。
轉載於:https://my.oschina.net/fifadxj/blog/521170