Java日誌框架演化歷史
專案中有一堆日誌相關的Jar包,到底應該引入哪些?排除哪些?哪些與哪些互相沖突?哪些與哪些又是相互依賴的?這類問題有時候容易讓人崩潰!
本文目的就是要理清Java眾多日誌包的關係,明白如何進行日誌轉換。對於不同日誌類的配置和使用方式,不在本文涉及範圍之內。
日誌相關Jar包分類
首先我們可以對眾多的日誌相關Jar包進行分類,主要分為三類:
介面類:只提供API定義,沒有提供具體實現。目的是為應用層提供標準化的使用方式。既所謂的面向介面程式設計。
- SLF4J
- J.C.L(commons-logging)
實現類:具體的日誌實現類,提供對日誌的收集/管理功能。受不同需求/不同歷史環境影響,各框架功能上有許多不同。但遵循進化論規律。
- Log4j
- J.U.L(jdk-logging)
- Log4j2
- Logback
橋接類:多種日誌實現框架混用情況下,需要藉助橋接類進行日誌的轉換,最後統一成一種進行輸出。
- slf4j-jdk14
- slf4j-log4j12
- log4j-slf4j-impl
- logback-classic
- slf4j-jcl
- jul-to-slf4j
- log4j-over-slf4j
- icl-over-slf4j
- log4j-to-slf4j
Java日誌框架發展歷史
下面我們按照他們出現的先後循序和歷史背景,來進行梳理。
Log4j
Apache基金會最早實現的一套日誌框架,在Java1.4之前只有這一種選擇。誰能想到Java1.4之前,JDK都沒有內建的日誌功能!。
J.U.L(jdk-logging)
終於在2002年Java1.4釋出,Sun推出了自己的日誌庫J.U.L(jdk-logging)。但基本上是模仿Log4j的實現。有點兒雞肋,但最起碼解決了有無的問題。從此開發者有了兩種選擇。
J.C.L(commons-logging)
因為有了兩種選擇,所以導致了日誌使用的混亂。所以Apache推出了J.C.L(commons-logging)。它只是定義了一套日誌介面,支援執行時動態載入日誌元件。應用層編寫程式碼時,只需要使用J.C.L提供的統一介面來記錄日誌,在程式執行時會優先找系統是否整合Log4j,如果整合則使用Log4j做為日誌實現,如果沒找到則使用J.U.L做為日誌實現。J.C.L的出現解決了多種日誌框架共存的尷尬,也是面向介面程式設計思想的一種具體體現。
Slf4j
2006年,Log4j的作者Ceki Gülcü離開Apache後,又搞出來一套類似J.C.L的介面類,就是Slf4j。原因是作者覺得J.C.L這套介面設計的不好,容易讓開發者寫出有效能問題的程式碼。Slf4j做為一套標準介面,可以實現無縫與多種實現框架進行對接。它也是現在比較常用的日誌整合方式。
Logback
在搞出來Slf4j之後,Ceki Gülcü又順帶開發了Logback,做為Slf4j的預設實現。在功能完整度和效能上,Logback超越了所有已有的日誌實現框架。
Log4j2
2012年,Apache重寫了Log4j,實現了Log4j2。在功能上面具有Logback的所有特性。算是目前功能最完善的日誌框架。
透過上面的介紹,我們已經知道一共有2個日誌介面標準和4個具體的實現。那一個專案中如果出現多種日誌框架,我們改怎麼進行統一呢?
為此,各開源組織為我們提供了一堆的日誌橋接類。下面我們透過一張轉換圖,來了解一下各種日誌框架的轉換關係。
圖上列舉出了多種日誌實現框架轉換成Slf4j介面和Slf4j介面繫結多種日誌實現框架所涉及到的相關Jar包。透過這些橋接包,我們可以輕鬆實現專案中日誌框架的統一。對於哪些包需要引入/哪些包需要排除也就一目瞭然了。
透過這種尋根溯源的方式來學習,不僅能夠弄明白每種技術出現的背景/需要應對的場景,還能夠理清整體的脈絡,從全域性上把握技術方向。當然也能夠加深對技術的理解程度。
宣告:圖片來源於網路,如有侵權,請聯絡刪除。
…
歡迎關注課程:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2325/viewspace-2823823/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【Java雜記】日誌:Java日誌體系,從應用場景到發展歷史Java
- JAVA日誌發展史Java
- LinkedIn架構演化歷史解析架構
- 萬字長文帶你瞭解Java日誌框架使用Java日誌框架Java框架
- 批量匯入歷史檔案到日誌服務
- Spark歷史日誌伺服器開啟及配置Spark伺服器
- hadoop配置歷史伺服器&&配置日誌聚集Hadoop伺服器
- Oracle11g清理資料庫歷史日誌Oracle資料庫
- 掌握Java各種日誌框架Java框架
- Java 日誌框架 LogbackJava框架
- Java日誌框架那些事兒Java框架
- 從STG射擊遊戲歷史看遊戲設計的演化遊戲設計
- Java的歷史Java
- [Java/日誌] 日誌框架列印應用程式日誌程式碼的執行情況Java框架
- java 日誌脫敏框架 sensitive,優雅的列印脫敏日誌Java框架
- 帶你掌握Java各種日誌框架Java框架
- Java日誌框架:logback詳解Java框架
- java發展歷史Java
- 資料庫MySQL一般查詢日誌或者慢查詢日誌歷史資料的清理資料庫MySql
- flask 框架日誌Flask框架
- Java日誌框架:SLF4J詳解Java框架
- Java常用的日誌框架對比和分析Java框架
- 用少量程式碼實現redux核心部分及其演化歷史Redux
- JavaScript模組化演化史JavaScript
- Golang的演化歷程Golang
- 日誌框架學習框架
- 5款Java開源日誌框架大比拼Java框架
- 縱橫20年,我所經歷的資料開放演化史
- MVP框架的演化MVP框架
- SpringBoot 日誌框架Spring Boot框架
- 日誌採集框架Flume框架
- Git.Framework 框架隨手記--歷史原因GitFramework框架
- logrotate自動輪換切割壓縮和清理歷史日誌場景介紹logrotate
- Java 20年:歷史與未來Java
- Java日誌框架:slf4j作用及其實現原理Java框架
- Go 語言的演化歷程Go
- Go語言的演化歷程Go
- 日誌框架SLF4J框架