一文讀懂常用日誌框架(Log4j、SLF4J、Logback)有啥區別
點選上方“芋道原始碼”,選擇“設為星標”
做積極的人,而不是積極廢人!
原始碼精品專欄
來源:http://t.cn/EVpprGI
1、概述
2、Commons Logging
3、SLF4J
4、Log4j
5、Log4j2
6、Logback
總結
1、概述
相信目前大多數情況下,不管是開源框架或是平時我們工作編碼中都離不開一種框架,它就是日誌框架。因此本節就簡單瞭解一下我們常用日誌框架的區別。
2、Commons Logging
common-logging是apache提供的一個通用的日誌介面,
在common-logging中,有一個Simple logger的簡單實現,但是它功能很弱,所以使用common-logging,通常都是配合著log4j來使用;
Commons Logging定義了一個自己的介面 org.apache.commons.logging.Log,以遮蔽不同日誌框架的API差異,這裡用到了Adapter Pattern(介面卡模式)。
3、SLF4J
Simple Logging Facade for Java(SLF4J)用作各種日誌框架(例如java.util.logging,logback,log4j)的簡單外觀或抽象,允許終端使用者在部署時插入所需的日誌框架。
要切換日誌框架,只需替換類路徑上的slf4j繫結。 例如,要從java.util.logging切換到log4j,只需將slf4j-jdk14-1.8.0-beta2.jar替換為slf4j-log4j12-1.8.0-beta2.jar
SLF4J不依賴於任何特殊的類裝載機制。 實際上,每個SLF4J繫結在編譯時都是硬連線的,以使用一個且只有一個特定的日誌記錄框架。 例如,slf4j-log4j12-1.8.0-beta2.jar繫結在編譯時繫結以使用log4j。 在您的程式碼中,除了slf4j-api-1.8.0-beta2.jar之外,您只需將您選擇的一個且只有一個繫結放到相應的類路徑位置。 不要在類路徑上放置多個繫結。
以下是slf4j 繫結其它日誌元件的圖解說明。
因此,slf4j 就是眾多日誌介面的集合,他不負責具體的日誌實現,只在編譯時負責尋找合適的日誌系統進行繫結。具體有哪些介面,全部都定義在slf4j-api中。檢視slf4j-api原始碼就可以發現,裡面除了public final class LoggerFactory類之外,都是介面定義。因此,slf4j-api本質就是一個介面定義。
總之,Slf4j更好的相容了各種具體日誌實現的框架,如圖:
4、Log4j
Apache Log4j是一個非常古老的日誌框架,並且是多年來最受歡迎的日誌框架。 它引入了現代日誌框架仍在使用的基本概念,如分層日誌級別和記錄器。
2015年8月5日,該專案管理委員會宣佈Log4j 1.x已達到使用壽命。 建議使用者使用Log4j 1升級到Apache Log4j 2。
5、Log4j2
Apache Log4j 2是對Log4j的升級,它比其前身Log4j 1.x提供了重大改進,並提供了Logback中可用的許多改進,同時修復了Logback架構中的一些固有問題。
與Logback一樣,Log4j2提供對SLF4J的支援,自動重新載入日誌配置,並支援高階過濾選項。 除了這些功能外,它還允許基於lambda表示式對日誌語句進行延遲評估,為低延遲系統提供非同步記錄器,並提供無垃圾模式以避免由垃圾收集器操作引起的任何延遲。
所有這些功能使Log4j2成為這三個日誌框架中最先進和最快的。
6、Logback
logback是由log4j創始人設計的又一個開源日誌元件,作為流行的log4j專案的後續版本,從而替代log4j。
Logback的體系結構足夠通用,以便在不同情況下應用。 目前,logback分為三個模組:logback-core,logback-classic和logback-access。
logback-core:模組為其他兩個模組的基礎。
logback-classic:模組可以被看做是log4j的改進版本。此外,logback-classic本身實現了SLF4J API,因此可以在logback和其他日誌框架(如log4j或java.util.logging(JUL))之間來回切換。
logback-access:模組與Servlet容器(如Tomcat和Jetty)整合,以提供HTTP訪問日誌功能。
總結
我建議直接選擇SLF4J而不是Log4j,commons logging,logback或java.util.logging
1、在開源庫或內部庫中使用SLF4J,將使其獨立於任何特定的日誌記錄實現,這意味著無需為多個庫管理多個日誌記錄配置,您的客戶端將會很需要這一點。
2、SLF4J提供了基於佔位符的日誌記錄,通過刪除檢查(isDebugEnabled(),isInfoEnabled()等)來提高程式碼的可讀性。
3、另外,臨時字串數量越少意味著垃圾收集器的工作量就越少,這意味著應用程式的吞吐量和效能會更好。
這些優勢只是冰山一角,當您開始使用SL4J深入瞭解它時,您將看到更多的優點。 我強烈建議,Java中的任何新程式碼開發都應該使用SLF4J來記錄日誌。
歡迎加入我的知識星球,一起探討架構,交流原始碼。加入方式,長按下方二維碼噢:
已在知識星球更新原始碼解析如下:
如果你喜歡這篇文章,喜歡,轉發。
生活很美好,明天見(。・ω・。)ノ♡
相關文章
- 日誌框架SLF4J框架
- Java 日誌框架 LogbackJava框架
- 一文讀懂BeanFactory和FactoryBean區別Bean
- Java中的日誌管理:SLF4J與LogbackJava
- 【Logback日誌級別】動態調整Logback的日誌級別
- 一文讀懂 JavaScript 和 ECMAScript 的區別JavaScript
- Java日誌框架:logback詳解Java框架
- Java日誌框架:SLF4J詳解Java框架
- log4j日誌級別
- Hibernate學習:slf4j日誌框架框架
- spring cloud多模組專案框架搭建-整合SLF4J和log4j日誌元件SpringCloud框架元件
- 一文讀懂 OceanBase 資料庫的SLog日誌資料庫
- Spring框架和Spring boot有啥區別?框架Spring Boot
- log4j日誌級別以及配置
- Springboot 整合logback 日誌框架簡介Spring Boot框架
- Java日誌框架:slf4j作用及其實現原理Java框架
- 日誌SLF4J解惑
- 一文讀懂鴻蒙系統與安卓系統的區別鴻蒙安卓
- log4j日誌輸出級別(轉)
- require和import有啥區別?UIImport
- 帶你深入Java Log框架,徹底搞懂Log4J、Log4J2、LogBack,SLF4JJava框架
- 告別DNS劫持,一文讀懂DoHDNS
- Log4j日誌體系結構解讀
- SLF4J 日誌門面
- SLF4J日誌的使用
- Confluence 6 log4j 日誌級別
- Python 中 "is" 與 "==" 有啥區別?Python
- 一文讀懂人臉識別技術
- 一文讀懂統計學與機器學習的本質區別(附案例)機器學習
- logback 日誌輸出格式
- logback日誌元件使用案例元件
- 簡單使用SLF4J日誌
- log4j日誌列印級別動態調整
- 日誌log4j的配置
- Spring Boot logback日誌配置Spring Boot
- Spring Boot 整合 Logback 日誌Spring Boot
- 日誌?聊一聊slf4j吧
- Log4J日誌記錄的優先順序別