Java日志混乱
首先是System.out和System.err。 但是它們不靈活,因此就需要功能豐富的日志記錄(請注意,當(dāng)時(shí)我在上小學(xué))。 可以定制格式記錄的日志,可以記錄到多個(gè)目標(biāo)(文件,控制臺,電子郵件等)。因此log4j出現(xiàn)在1999年 。
但是也產(chǎn)生了其他解決方案,包括java.util.logging –嘗試使用標(biāo)準(zhǔn)JDK日志記錄。 事實(shí)證明,這是一次非常成功的嘗試。 java.util.logging于2002年初與JDK 1.4一起出現(xiàn)。幾個(gè)月后,由于意識到所有現(xiàn)有記錄器都需要一個(gè)通用日志記錄接口,導(dǎo)致apache common-logging 。
Commons Logging的想法是可行的–庫不應(yīng)在使用它們的應(yīng)用程序上強(qiáng)制執(zhí)行特定的日志記錄實(shí)現(xiàn)。 因此,每個(gè)日志記錄實(shí)現(xiàn)都適應(yīng)于庫使用的通用API –因此您的庫不使用org.apache.log4j.Logger –它使用org.apache.commons.logging.Log,并將其委托給任何日志記錄框架存在于類路徑上。 這樣,您的項(xiàng)目可以使用多個(gè)庫,并對所有庫使用單個(gè)日志記錄配置。
但是公共記錄不足。 人們說它造成的問題多于解決的問題。 所以的log4j的作者- CekiGülcü SLF4J(簡單記錄門面為Java) -創(chuàng)建了一個(gè)新的項(xiàng)目在2005年 。 它旨在成為更好的公共記錄。
Log4j自1999年以來已被廣泛使用,但是它還不夠好,所以請猜測誰創(chuàng)建了一個(gè)新項(xiàng)目– logback。 再次是CekiGülcü。 為什么要一個(gè)新項(xiàng)目? 好吧,我想是出于政治原因和需要從頭開始替換的舊代碼庫的結(jié)合。 無論如何,logback出現(xiàn)在2006年。它比log4j好嗎? 塞基在這里解釋 。
所以回到今天-有很多日志記錄框架和兩個(gè)外觀-commons-logging和slf4j。 每個(gè)庫都使用不同的庫,而且情況一團(tuán)糟。 版本不匹配,類路徑上有大量Logger類。 Maven通過至少不允許同一日志記錄實(shí)現(xiàn)的多個(gè)版本而成功地簡化了這一過程,僅此而已。 而且,如果您不了解上面的所有歷史記錄以及哪個(gè)框架用于什么,那么您的項(xiàng)目很可能會(huì)遭受這種混亂。
有什么解決方案? 最簡單的方法是使用slf4j和logback。 為什么?
- slf4j具有許多現(xiàn)有實(shí)現(xiàn)的橋梁。 這意味著您將刪除log4j.jar并使用log4j-over-slf4j.jar –它在同一軟件包中具有相同的類,只是實(shí)現(xiàn)有所不同–它委托使用中的當(dāng)前slf4j實(shí)現(xiàn)。 這樣,所有使用log4j(或任何其他橋接實(shí)現(xiàn))的庫都將與您的logback配置一起使用。 不幸的是,這在java.util.logging中不能很好地工作,因此您必須希望不要有太多的庫決定“最小的依賴范圍”。
- logback優(yōu)于log4j(相同作者-較新的實(shí)現(xiàn),從以前的錯(cuò)誤中學(xué)習(xí))
- 如果出現(xiàn)了比登錄更好的框架,則可以輕松切換到該框架而無需更改類。
最后,介紹一下日志記錄配置。 它應(yīng)該在外部,以與其他外部化項(xiàng)目配置相同的方式(最好在相同的位置)。 然后,您應(yīng)該基于系統(tǒng)的“ config.location”屬性加載它。
(在基于Spring的Web應(yīng)用程序中,有Log4jWebConfigurer ,但沒有LogbackWebConfigurer 。幸運(yùn)的是,它很容易編寫,并且有一些基于log4j的現(xiàn)有實(shí)現(xiàn)。在web.xml中, logbackConfigLocation參數(shù)應(yīng)該是: file://${config.lotation}/logback.xml )
為什么這么簡單的事情變得如此復(fù)雜? 因?yàn)檫@并不簡單。 最初沒有考慮太多因素,因此需要在以后進(jìn)行糾正。 自2006年以來該領(lǐng)域未發(fā)生重大變化是一件好事,因此我們可以認(rèn)為情況保持穩(wěn)定。
參考: Bozho的技術(shù)博客上來自我們的JCG合作伙伴 Bozhidar Bozhanov的 The Logging Mess 。
相關(guān)文章 :
- 正確記錄應(yīng)用程序的10個(gè)技巧
- 每個(gè)程序員都應(yīng)該知道的事情
- Java教程和Android教程列表
- 如何解決生產(chǎn)問題
- 每個(gè)程序員或架構(gòu)師都應(yīng)該知道的9 + 7件事
翻譯自: https://www.javacodegeeks.com/2011/09/java-logging-mess.html
總結(jié)
- 上一篇: 地狱战兵电脑版(战地地狱战士)
- 下一篇: Java 7功能概述