日誌系統入門

日誌,源於log,有航海日誌的意思。指記錄海員記錄每天的行程,生活及發生的事件。在軟件開發領域,用來監控代碼中變量變化,跟蹤代碼運行的軌跡,在開發環境中擔當調試器作用,向控制檯或文件輸出信息。



幾乎所有的軟件開發語言(平臺)都有自己的日誌系統,java,.net,ruby,php等。在java領域,存在大量的日誌組件,open-open收錄了21個日誌組件。

從功能上講,這些可以分爲三類,一是日誌工具類,它實現了日誌的記錄,格式化和級別的劃分,代表爲logback,simplelog。二是日誌系統,提供了完整的框架功能並實現了日誌記錄。代表爲jul(jdk提供的日誌框架),log4j(apache開源項目)。三是抽象整合類,它提供了一組接口,完成日誌功能,通過包裝其他日誌工具或系統來工作jcl(apache開源組件),slf4j。



從歷史上講,log4j出現最早,Ceki Gülcü是其創造者。自java1.4開始,jdk提供了java.util.logging類庫,提供了一個完整的日誌框架,在設計上要比log4j要更清晰。這個時候,除此之外,還有一些其他日誌組件,java領域從來不缺少輪子,總是有人在發明輪子,輪子多了,就會產生混亂,就會有人站出來,要一統江湖,於是,jcl,apache一個開源的日誌組件誕生了,它提供了一組日誌系統的接口,通過對log4j,jul和simplelog進行包裝,提供日誌功能。這樣,開發的時候,只需要使用jcl,通過配置,靈活選擇底層實現。這樣,對於開發人員來說,開發更簡單了些。看起來一切太平了,可Ceki Gülcü認爲,應該有一個更好的日誌框架。log4j經過這麼久的發展,已經成爲了一個巨人,亦傷痕累累,從外面看,經典,莊重,強壯,從內部看,卻有着一根根的飛線(ThinkPad),充滿了代碼的壞味道。或許他沒有勇氣來改造這個巨人,離開也許是最好的選擇,於是,出來,創建了slf4j,來取代jcl,創建了logback,來取代log4j。目前,log4j和jul應用最爲廣泛,slf4j作爲新興的抽象層,整合logback,以其簡潔,快速,正被越來越多的頂級項目使用。



代表日誌組件簡要介紹:

Log4j,歷史悠久,應用廣泛,被移植到多種語言及平臺,功能強大,在衆多的日誌框架中,仍佔據着主導地位。

Jul,jdk提供的日誌框架,設計精良,和jdk緊密結合,控制靈活,使用簡單。

Jcl,提供了日誌的抽象層,可以整合多種實現。但有classloader問題。

Slf4j,提供了jcl的超集,避免了classloader問題。

Logback,可靠,通用,快速,靈活的java日誌工具(官方描述)。



項目選擇思考:

如果是單一的項目,如桌面應用,採用jul,免配置,控制靈活。

如果是web開發,宜採用log4j,因爲系統已經有了很多的配置文件,不在乎多一個,而且log4j可以脫離任何組件,不像jul,和jvm緊密結合在一起。

如果是多項目整合開發,宜採用slf4j,一是它可以整合其他遺留日誌組件,二是其提供的抽象層,爲將來的開發提供了靈活性。



參考資料:

1.IBM developerworks對log4j的介紹


2.Java開源日誌組件列表

 

3.Slf4j官方網站

4.Logback官方網站

5.Log4j官方網站

6.Jcl官方網站

7.Sun官方網站

8.一個jcl的中文說明

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章