用slf4j+logback替代commons-logging+log4j
- 加載如下jar包:
slf4j-api.jar
logback-core.jar
logback-classic.jar
log4j-over-slf4j.jar
jcl104-over-slf4j.jar
- 同時刪除commons-logging.jar和log4j.jar
- 到http://logback.qos.ch/translator/Welcome.do轉換log4j.properties爲logback.xml
體會
在目前大量開源框架使用commons-logging和log4j的狀況下,單純切換到
slf4j沒有什麼必要,除了多了些日誌接口,加強了參數設置,沒有本質上的改進;而
slf4j+
logback的聯合方式仍是有前景的,同原先的log4j相比
logback有如下改進:
- 支持按文件大小或基於時間的切分方式,可自定義命名模式
- 支持文件打包(觸發器方式)
- 支持OSGI環境
FAQ
問題1:org.slf4j.impl.StaticLoggerBinder.SINGLETON
產生緣由:
slf4j-1.5.5+
logback-0.9.13使用時會報該錯誤
解決:升級
slf4j到1.5.6
問題2:Failed to load class org.slf4j.impl.StaticLogger
產生緣由:
slf4j未找到具體的日誌實現
解決:選擇一種日誌實現放入類路徑中,可選實現有:
slf4j-nop.jar ,
slf4j-simple.jar ,
slf4j-log4j12.jar ,
slf4j-jdk14.jar or
logback-classic.jar
問題3:java.lang.NoClassDefFoundError: org/codehaus/janino/ExpressionEvaluator
產生緣由:未加載janino.jar。
說明:在使用ch.qos.
logback.classic.net.SMTPAppender的時候發生。
Janino是一種內嵌的開源Java編譯器。Janino並非一種提供給開發人員編譯程序的編譯器,而是Java程序在運行時編譯Java代碼的編譯器。Janino經過動態編譯代碼,從而提升了程序的性能。
解決:將janino.jar加入類路徑