談?wù)摿?/a>他使用LOGBack的經(jīng)驗(yàn):
我已經(jīng)用了LOGBack幾個(gè)月,我被它打動(dòng)了。
文檔和支持都很完善,日志功能簡潔利落,性能表現(xiàn)也說得上風(fēng)馳電掣,還有創(chuàng)新的Eclipse插件,我終于給勞苦功高的Log4J找到了接班人。
Rob Willams 補(bǔ)充說:
噢,還有,我們當(dāng)初毅然決定采用LogBack。愛死它了。整個(gè)過渡過程一點(diǎn)麻煩都沒有,我們絕對喜歡它的新語法。
他所說的新語法讓LOGBack能夠處理許多復(fù)雜的日志語句,而不再需要事先檢查日志級別(logging level),同時(shí)性能上的影響微不足道。比如在Log4J里面,你可能會這樣寫:
if( logger.isDebugEnabled() ) {
logger.debug( "User with account " +
user.getAccount() + " failed authentication; " +
"supplied crypted password " + user.crypt(password) +
" does not match." );
}
等價(jià)的LOGBack語句如下:
logger.debug( "User with account {} failed authentication; " +
"supplied crypted password {} does not match.",
user.getAccount(), user.crypt(password) );
LOGBack把拼裝消息的代價(jià)推遲到它能夠確定是不是要顯示這條消息的時(shí)候。不過獲取參數(shù)的高昂代價(jià)并沒有被推遲支付,比如上例中的密碼加密。
LOGBack還聲稱自己性能更佳:
某些關(guān)鍵操作,比如判定是否記錄一條日志語句的操作,其性能得到了顯著的提高。這個(gè)操作在LOGBack中需要3納秒,而在Log4J中則需要30納秒。LOGBack創(chuàng)建記錄器(logger)的速度也更快:13毫秒,而在Log4J中需要23毫秒。更重要的是,它獲取已存在的記錄器只需94納秒,而Log4J需要2234納秒,時(shí)間減少到了1/23。跟JUL相比的性能提高也是顯著的。
LOGBack還可以被集成,目前已經(jīng)有了一個(gè)Eclipse插件和一個(gè)JMX Configurator Bean。
InfoQ就LOGBack訪問了Ceki,第一個(gè)問題是大家都關(guān)心的:為什么要建立另一個(gè)日志框架,而不是把這些改進(jìn)放到Log4J中去?
我當(dāng)時(shí)(今天也還部分地)覺得在Apache Logging Services項(xiàng)目之外做創(chuàng)新會容易一些。不要誤會我的意思,我對Apache Software Foundation的評價(jià)很高,它是一個(gè)獨(dú)特的,而且在很多方面都極其出色的組織。誰也說不定,可能有一天SLF4J和LOGBack成為日志領(lǐng)域新的事實(shí)標(biāo)準(zhǔn)的時(shí)候,會重新融入Apache。
關(guān)于SLF4J的接受程度:
現(xiàn)在有幾個(gè)重量級項(xiàng)目,比如Hibernate、Jetty、Spring-OSGi和Wicket都已經(jīng)遷移到了SLF4J API,我可以毫不慚愧地說,SLF4J的吸引力不可忽視。SLF4J正在四處冒出頭來,雖然Jakarta Commons Logging(JCL)這個(gè)廣泛使用的類庫,在Apache品牌的溫暖陽光沐浴下,占據(jù)著整個(gè)疆域。考慮到開始時(shí)的劣勢,SLF4J現(xiàn)在的表現(xiàn)已經(jīng)超過了我們的預(yù)期。
當(dāng)被問到如何比較LOGBack的免費(fèi)文檔,和Log4J那種小部分免費(fèi)大部分商業(yè)的文檔時(shí):
如你所說,Log4J只提供了有限的免費(fèi)文檔,完善的文檔則需要付費(fèi)。對于LOGBack,我們采納了另一種途徑,我們所有的文檔都可以在我們的項(xiàng)目網(wǎng)站上直接看到,獲取也完全免費(fèi),這給了Java開發(fā)者們又一個(gè)理由轉(zhuǎn)移到LOGBack。另外,LOGBack的市場占有率比Log4J要低一個(gè)數(shù)量級,銷售LOGBack的文檔沒有任何經(jīng)濟(jì)上的意義。
為了保證項(xiàng)目的長期經(jīng)濟(jì)支持,我們開發(fā)了一個(gè)跟LOGBack稍稍相關(guān)的產(chǎn)品,過幾周就會推出。我們對LOGBack的長期計(jì)劃是不搞任何噱頭,把它發(fā)展成一個(gè)合作性的開源項(xiàng)目。至于“合作性”,我的意思是開方給所有開發(fā)者作貢獻(xiàn),而不局限于現(xiàn)在的開發(fā)團(tuán)隊(duì)。
請說說離1.0版發(fā)布還差些什么:
對于即將到來的1.0版,大部分重要的東西都已經(jīng)齊備了。我們還要修復(fù)很多錯(cuò)誤,但主要的工作還是完善文檔,做更多的測試,一再重復(fù)做這些事情。我說過要完善文檔沒?
在日志這個(gè)領(lǐng)域還有很多東西需要我們?nèi)プ觯赡芤脦状瞬拍芡瓿伞N覀円呀?jīng)逐漸看清了前面的路途,希望能夠給未來鋪平一些道路。
當(dāng)被問到LOGBack有哪些能夠吸引開發(fā)者的地方:
沒有絕對的答案。有些用戶可能會覺得性能是一個(gè)值得轉(zhuǎn)移到LOGBack的理由,其他人可能覺得Log4J已經(jīng)不錯(cuò)。雖然我和其他LOGBack開發(fā)者們正努力給用戶更多的理由,不過我們中間很多人對于能夠從事一個(gè)強(qiáng)調(diào)質(zhì)量的軟件項(xiàng)目已經(jīng)很滿意。我們必須“吃我們自己的狗食”,并在這個(gè)過程中得到有價(jià)值的軟件開發(fā)技能——按今天的標(biāo)準(zhǔn)來說并不壞。考慮到LOGBack項(xiàng)目的出發(fā)點(diǎn)正是Log4J項(xiàng)目的不及之處,只要我們持續(xù)不斷地改進(jìn)LOGBack,我們相信一定會有越來越多的Java開發(fā)者接受SLF4J/LOGBack的組合。
因?yàn)镾LF4J和LOGBack可以橋接其他競爭性的API,開發(fā)者們可以在他們的項(xiàng)目中用LOGBack替換Log4J(通過log4j-bridge.jar)和Jakarta Commons-Logging(通過jcl104-over-slf4j.jar),因而不必僅僅為了使用LOGBack而被迫在同一個(gè)項(xiàng)目中配置好幾個(gè)日志框架。
關(guān)于LOGBack和SLF4J的更多信息請閱讀Ceki的 <十個(gè)轉(zhuǎn)移到LOGBack的理由>。