29 2月 2008

slf4j and logback

commons-logging(JCL) 跟 log4j用的好好的,也沒什麼特別不合的需求,居然還是想用用slf4j 跟 logback,嗯,純粹是無聊…

slf4j跟commons-logging相同,提供一個簡單的facade,讓我們可以彈性的更改不同的logging實做。而logback就同於log4j,籍由configuration可以設定不同的log level,並輸出至System.out、檔案、DB或是其他Target.

其實slf4j/logback的配對,跟commons-logging/log4j佷像,slf4j提供統一的介面再加上adapter,就可以使用其他log的實作。預設是採用logback,如果要用jdk內建的log或是log4j都需要加上對應的adapter,
如果要用slf4j/logback,應該需要下列檔案
slf4j-api.jar
logback-core.jar
logback-classic.jar
logback.xml

如果是想採用slf4j/log4j,就需要下列檔案
slf4j-api.jar
log4j.jar
slf4j-log4j12.jar
log4j.properties or log4j.xml

如果是已經採用了commons-logging/log4j想嚐鮮用用slf4j/logback,那也容易,用下列檔案
slf4j-api.jar
logback-core.jar
logback-classic.jar
jcl104-over-slf4j.jar
log4j-over-slf4j.jar
再到http://logback.qos.ch/translator/Welcome.do,將你原來的log4j.properties轉成logback.xml
就可以將commons-logging.jar 跟 log4j.jar自你系統中移除了


其實logback與log4j所提供的appender也相差不多,如果沒遇到特別的問題(commons-logging 的classloader可能造成memory leak,log4j在loop時效能可能較低。。。),其實不太需要改變現有的logging機制,但如果是新起的project,那改用這個所需的學習曲線很低,應該值得一試,當然,試出有什麼特別優點時可要快點說出來

2009/07/20補:如果系統中確定沒有直接使用到log4j,而都是透過commons-logging的話可以不用include log4j-over-slf4j.jar