log 日志原理
1)slf4j接口
僅僅定義了接口,因此,需要綁定到具體的日志框架才可以打印日志出來,具體如何來做呢,引用一張slf4j官網上的圖片:

具體的組合使用:
slf4j-api,日志是打到了/dev/null里面,因此啥也打印不出來
slf4j-api + logback-classic:使用的是logback,因為logback本身直接實現了slf4j的api
slf4j-api + slf4j-log4j + log4j:最終是使用log4j,因為log4j本身并沒有實現slf4j的接口,所以中間用slf4j-log4j橋接了一下子。
slf4j-api + slf4j-jdk + jul:最終是使用jul,中間用slf4j-jdk橋接了一下。
slf4j-api + slf4j-simple:slf4j的一個簡單實現,只能把日志打印到System.err中。
slf4j-api + slf4j-nop:跟只用slf4j-api一樣,啥也不打印輸出。
slf4j-api + slf4j-jcl + jcl: 最終是使用jcl。
2)重定向
很多時候,我們的項目依賴了某一個jar,依賴包里面可能并沒有使用slf4j打印日志,而是使用的log4j或者jcl打印日志,而我們的項目本身又想用slf4j,能不能把依賴包里面的日志打印重定向成我們的slf4j呢?,slf4j對這種情況也做了處理,在不修改依賴包里面的代碼的情況下可以這樣:
把jcl的jar包刪掉,換上jcl-over-slf4j;log4j的jar刪掉,換成log4j-over-slf4j;添加上jul-to-slf4j;然后再添加上slf4j-api 和 logback就可以在不修改打日志的代碼的情況下,最終都使用logback打印日志。
把jcl的jar包刪掉,換上jcl-over-slf4j;添加上jul-to-slf4j;然后再添加上slf4j-api 和slf4j-log4j 和 log4j,最終就是使用log4j打印日志。
把jcl的jar包刪掉,換上jcl-over-slf4j;log4j的jar刪掉,換成log4j-over-slf4j;然后再添加上slf4j-api 和 slf4j-jdk + jul,最終就是使用jul打印日志。
以上也可以看出來,jcl-over-slf4j.jar和slf4j-jcl.jar不能共存的,log4j-over-slf4j.jar和slf4j-log4j12不能共存,jul-to-slf4j和slf4j-jdk14.jar不能共存。
3)組合實現示例
SLF4J + Log4j2實現

轉自:SpringBoot-04 | spring-boot-starter-logging原理原理-CSDN博客

浙公網安備 33010602011771號