簡化SLF4J和通用日誌工具的區別
這就是為什麼現在每個人都用SLF4J的原因:)
下麵是如何追蹤和更新你的SLF4J日誌:
- 首先,查詢slf4j綁定的類路徑。
- 然後,確保隻有一個這樣的綁定。
- 最後,當你找到正在被使用的綁定:查閱它的配置特性。
另一方麵-下麵是如何追蹤通用日誌:
首先,你得找到日誌綁定是如何實現。
檢查commons-logging.properties 裏的org.apache.commons.logging.log的屬性是否設置,或通過應用裏的Commons Logging API設置。
如果沒有設置,檢查路徑下的log4j,如果有JDKLogger(IDK1.4+),或最後,如果簡單logger已被使用(當沒有其他可用logger時,common logging會使用默認logger)。
然後,查閱logging配置裏的配置特性。
編譯時綁定和運行時綁定
當我第一次閱讀關於編譯時綁定時,感覺很模煳:一個java庫如何能用不同的依賴編譯時綁定的框架來記錄日誌?答案是“編譯時”綁定隻適用於這樣的情況-對SLF4J logger的實現時,SLF4J“被編譯”。然而,你仍可以在運行時使用不同的綁定。
SLF4J不使用類加載器,而是,很簡單:它加載org.slf4j.impl.StaticLoggerBinder。每一個SLF4J的實現(例如slf4j-log4j 綁定)提供一個有確切名稱的類。所以這裏沒有疑惑,在運行時,相同的情況發生了:類被從類路徑裏直接取出,沒有任何魔術運行。如果在類路勁下沒有slf4j實現方法會怎麼樣? 怎樣…然後會沒有任何日誌。
有時候魔術運行很好。其他時候,很煩人。
唯一你可以決定的方法是:在這個情況後,如果你應用中可用的魔術運行是值得的。所以我任何common-logging是個很重要的嚐試:它表明,依靠明確的綁定,可以用許多不同的方式實現,在java社區不能很好地工作。
從複雜的commons-logging API吸取的經驗,已經給SLF4J提供了更簡單、更明確和同樣動態的方法。
是什麼使SLF4J這麼好?老實說,可能是現代的java開發者在依賴管理上非常有效,因為他們通常 使用maven來管理依賴。
因此,SLF4J純粹的JAR綁定策略超容易實現的(基於現代java依賴管理工具)。
大概10年前,在java依賴管理問題解決前,commons-logging是一個簡單的,快速而粗糙,同事沒有太多配置開銷的方式,以確保您的應用程序可以記錄動態。
最後更新:2017-05-19 16:38:14