本文章不對日誌組件進行優劣評價,只是對關係進行對比。在日誌中組件中存在這樣的幾種關係, 這幾種關係理解清楚, 有助於咱們對日誌的引入和使用。spring
日誌門面就是指直接引入咱們程序中進行記錄日誌的日誌組件(例如SLF4J不是具體的日誌解決方案,它只服務於各類各樣的日誌系統,它須要下面的具體日誌實現來進行記錄日誌, 而日誌實現也須要一個門面來與日誌系統進行鏈接, 能夠說日誌門面就是實現與系統之間的一個鏈接器),做爲日誌門面的這些組件會在程序中直接依賴, 上圖中就列舉的幾種常見的日誌門面的組件。像一些軟件直接回默認使用一些組件, 好比Spring使用的就是commons-logging, activiti使用的日誌門面就是slf4j, 其餘的軟件也都會選用本身認爲好用的日誌門面。spa
除了log4j既是門面又是實現以外, commons-logging和slf4j(這些日誌門面) 都是不能直接打印日誌的, 都須要依賴一個日誌實現來打印日誌,上圖中也舉了幾個日誌實現。日誌
slf4j默認和logback作了一些橋接的處理,那麼橋接的做用是什麼呢, 假如我想使用slf4j作爲實現的門面,然而同時我想使用log4j做爲真正的日誌實現,這個時候就須要slf4j-logrj12 jar包, 如今應該能夠理解橋接方式了。ip
這裏的做用是爲了不一些衝突, 例如在這樣的場景下,咱們使用spring作爲開發,而咱們開發的軟件要使用的是slf4j做爲日誌門面,這個時候由於Spirng默認使用的是commons-logging做爲日誌門面,這個時候就會發生一些衝突, 因此咱們能夠引入jcl-over-slf4j, 經過這個組件把commons-logging覆蓋掉, 爲了把歷史軟件內部的依賴覆蓋掉, 就可經過這個方式改變依賴。開發