一文读懂常用日志框架(Log4j、SLF4J、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來記錄日志。
總結
以上是生活随笔為你收集整理的一文读懂常用日志框架(Log4j、SLF4J、Logback)有啥区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 指明方向与趋势!2019开发者技能报告出
- 下一篇: Kubernetes 2018 年度简史