日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

一文读懂常用日志框架(Log4j、SLF4J、Logback)有啥区别

發布時間:2025/3/21 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一文读懂常用日志框架(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)有啥区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。