簡化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是一個簡單的,快速而粗糙,同事沒有太多配置開銷的方式,以確保您的應用程式可以記錄動態。