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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

slf4j、jcl、jul、log4j1、log4j2、logback大总结

發布時間:2025/6/15 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 slf4j、jcl、jul、log4j1、log4j2、logback大总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

#1 系列目錄#

  • 2種日志接口框架,4種日志實現框架
  • jdk-logging、log4j、logback日志介紹及原理
  • jcl與jul、log4j1、log4j2、logback的集成原理
  • slf4j與jul、log4j1、log4j2、logback的集成原理
  • slf4j、jcl、jul、log4j1、log4j2、logback大總結
  • slf4j + log4j原理實現及源碼分析
  • Apache Log4j
  • Log4j架構分析與實戰
  • Log4J配置文件詳解
  • Apache Commons Logging
  • Commons Logging 架構分析
  • JDK Logging
  • JDK Logging 深入分析
  • Logback
  • 從Log4j遷移到LogBack的理由
  • Logback 深入分析
  • Apache Log4j2
  • Log4j2架構分析與實戰
  • Log4j2配置文件詳解

#2 各種jar包總結#

  • log4j1:

  • log4j:log4j1的全部內容

  • log4j2:

  • log4j-api:log4j2定義的API

  • log4j-core:log4j2上述API的實現

  • logback:

  • logback-core:logback的核心包

  • logback-classic:logback實現了slf4j的API

  • commons-logging:

  • commons-logging:commons-logging的原生全部內容

  • log4j-jcl:commons-logging到log4j2的橋梁

  • jcl-over-slf4j:commons-logging到slf4j的橋梁

  • slf4j轉向某個實際的日志框架:場景介紹:如 使用slf4j的API進行編程,底層想使用log4j1來進行實際的日志輸出,這就是slf4j-log4j12干的事。

  • slf4j-jdk14:slf4j到jdk-logging的橋梁

  • slf4j-log4j12:slf4j到log4j1的橋梁

  • log4j-slf4j-impl:slf4j到log4j2的橋梁

  • logback-classic:slf4j到logback的橋梁

  • slf4j-jcl:slf4j到commons-logging的橋梁

  • 某個實際的日志框架轉向slf4j:場景介紹:如 使用log4j1的API進行編程,但是想最終通過logback來進行輸出,所以就需要先將log4j1的日志輸出轉交給slf4j來輸出,slf4j再交給logback來輸出。將log4j1的輸出轉給slf4j,這就是log4j-over-slf4j做的事。這一部分主要用來進行實際的日志框架之間的切換(下文會詳細講解)。

  • jul-to-slf4j:jdk-logging到slf4j的橋梁

  • log4j-over-slf4j:log4j1到slf4j的橋梁

  • jcl-over-slf4j:commons-logging到slf4j的橋梁

#3 集成總結# ##3.1 commons-logging與其他日志框架集成##

  • 1 commons-logging與jdk-logging集成,需要的jar包:

  • commons-logging

  • 2 commons-logging與log4j1集成,需要的jar包:

  • commons-logging

  • log4j

  • 3 commons-logging與log4j2集成,需要的jar包:

  • commons-logging

  • log4j-api

  • log4j-core

  • log4j-jcl(集成包)

  • 4 commons-logging與logback集成,需要的jar包:

  • logback-core

  • logback-classic

  • slf4j-api、jcl-over-slf4j(2個集成包,可以不再需要commons-logging)

  • 5 commons-logging與slf4j集成,需要的jar包:

  • jcl-over-slf4j(集成包,不再需要commons-logging)

  • slf4j-api

##3.2 slf4j與其他日志框架集成##

  • slf4j與jdk-logging集成,需要的jar包:

  • slf4j-api

  • slf4j-jdk14(集成包)

  • slf4j與log4j1集成,需要的jar包:

  • slf4j-api

  • log4j

  • slf4j-log4j12(集成包)

  • slf4j與log4j2集成,需要的jar包:

  • slf4j-api

  • log4j-api

  • log4j-core

  • log4j-slf4j-impl(集成包)

  • slf4j與logback集成,需要的jar包:

  • slf4j-api

  • logback-core

  • logback-classic(集成包)

  • slf4j與commons-logging集成,需要的jar包:

  • slf4j-api

  • commons-logging

  • slf4j-jcl(集成包)

#4 日志系統之間的切換# ##4.1 log4j無縫切換到logback## ###4.1.1 案例### 我們已經在代碼中使用了log4j1的API來進行日志的輸出,現在想不更改已有代碼的前提下,使之通過logback來進行實際的日志輸出。已使用的jar包:

  • log4j

使用案例:

private static final Logger logger=Logger.getLogger(Log4jTest.class); public static void main(String[] args){if(logger.isInfoEnabled()){logger.info("log4j info message");} }

上述的Logger是log4j1自己的org.apache.log4j.Logger,在上述代碼中,我們在使用log4j1的API進行編程。現在如何能讓上述的日志輸出通過logback來進行輸出呢?只需要更換一下jar包就可以:

  • 第一步:去掉log4j jar包

  • 第二步:加入以下jar包

  • log4j-over-slf4j(實現log4j1切換到slf4j)

  • slf4j-api

  • logback-core

  • logback-classic

  • 第三步:在類路徑下加入logback的配置文件

###4.1.2 切換原理### 看下log4j-over-slf4j(簡化更改版的log4j)就一目了然了:

我們可以看到,這里面其實是簡化更改版的log4j。去掉log4j1的原生jar包,換成該簡化更改版的jar包(可以實現無縫遷移)。但是簡化更改版中的Logger和原生版中的實現就不同了,簡化版中的Logger實現如下(繼承了Category):

public class Category {private String name;protected org.slf4j.Logger slf4jLogger;private org.slf4j.spi.LocationAwareLogger locationAwareLogger;Category(String name) {this.name = name;slf4jLogger = LoggerFactory.getLogger(name);if (slf4jLogger instanceof LocationAwareLogger) {locationAwareLogger = (LocationAwareLogger) slf4jLogger;}} }

從上面可以看到簡化版中的Logger內部是使用slf4j的API來生成的,所以我們使用的簡化版的Logger會委托給slf4j來進行輸出,由于當前類路徑下有logback-classic,所以slf4j會選擇logback進行輸出。從而實現了log4j到logback的日志切換。

##4.2 jdk-logging無縫切換到logback## ###4.2.1 案例###

private static final Logger logger=Logger.getLogger(JulSlf4jLog4jTest.class.getName());public static void main(String[] args){logger.log(Level.INFO,"jul info a msg");logger.log(Level.WARNING,"jul waring a msg"); }

可以看到上述是使用jdk-logging自帶的API來進行編程的,現在我們想這些日志交給logback來輸出,解決辦法如下:

  • 第一步:加入以下jar包:

  • jul-to-slf4j (實現jdk-logging切換到slf4j)

  • slf4j-api

  • logback-core

  • logback-classic

  • 第二步:在類路徑下加入logback的配置文件

  • 第三步:在代碼中加入如下代碼:

static {SLF4JBridgeHandler.install(); }

###4.2.2 切換原理### 先來看下jul-to-slf4j jar包中的內容:

我們看到只有一個類:SLF4JBridgeHandler。

它繼承了jdk-logging中定義的java.util.logging.Handler,Handler是jdk-logging處理日志過程中的一個處理器(具體我也沒仔細研究過),在使用之前,必須要提前注冊這個處理器,即上述的SLF4JBridgeHandler.install()操作,install后我們就可以通過這個handler實現日志的切換工作,如下:

protected Logger getSLF4JLogger(LogRecord record) {String name = record.getLoggerName();if (name == null) {name = UNKNOWN_LOGGER_NAME;}return LoggerFactory.getLogger(name); }

在處理日志的過程中,使用了slf4j的原生方式LoggerFactory來獲取一個slf4j定義的Logger來進行日志的輸出,而slf4j則又會選擇logback來進行實際的日志輸出。

##4.3 commons-logging切換到logback## ###4.3.1 使用案例### 使用的jar包

  • commons-logging

案例如下:

private static Log logger=LogFactory.getLog(JulJclTest.class);public static void main(String[] args){if(logger.isTraceEnabled()){logger.trace("commons-logging-jcl trace message");} }

可以看到我們使用commons-logging的API來進行日志的編程操作,現在想切換成logback來進行日志的輸出(這其實就是commons-logging與logback的集成),解決辦法如下:

  • 第一步:去掉commons-logging jar包(其實去不去都無所謂)

  • 第二步:加入以下jar包:

  • jcl-over-slf4j(實現commons-logging切換到slf4j)

  • slf4j-api

  • logback-core

  • logback-classic

  • 第三步:在類路徑下加入logback的配置文件

###4.3.2 切換原理### 這個原理之前都已經說過了,可以看下commons-logging與logback的集成

就是commons-logging通過jcl-over-slf4j 來選擇slf4j作為底層的日志輸出對象,而slf4j又選擇logback來作為底層的日志輸出對象。

##4.4 常用的日志場景切換解釋## 上面把日志的切換原理說清楚了,下面就針對具體的例子來進行應用,先來看下slf4j官方的一張圖:

下面分別詳細說明這三個案例

###4.4.1 左上圖###

  • 現狀:目前的應用程序中已經使用了如下混雜方式的API來進行日志的編程

  • commons-logging

  • log4j1

  • jdk-logging

  • 改進:現在想統一將日志的輸出交給logback

  • 第一步:將上述日志系統全部無縫先切換到slf4j

(1)去掉commons-logging(其實去不去都可以),使用jcl-over-slf4j將commons-logging的底層日志輸出切換到slf4j

(2)去掉log4j1(必須去掉),使用log4j-over-slf4j,將log4j1的日志輸出切換到slf4j

(3)使用jul-to-slf4j,將jul的日志輸出切換到slf4j

  • 第二步:使slf4j選擇logback來作為底層日志輸出,加入以下jar包:

(1)slf4j-api

(2)logback-core

(3)logback-classic

###4.4.2 右上圖###

  • 現狀:目前的應用程序中已經使用了如下混雜方式的API來進行日志的編程:

  • commons-logging

  • jdk-logging

  • 改進:現在想統一將日志的輸出交給log4j1

  • 第一步:將上述日志系統全部無縫先切換到slf4j

(1)去掉commons-logging(其實去不去都可以),使用jcl-over-slf4j將commons-logging的底層日志輸出切換到slf4j

(2)使用jul-to-slf4j,將jul的日志輸出切換到slf4j

  • 第二步:使slf4j選擇log4j1來作為底層日志輸出,加入以下jar包:

(1)slf4j-api

(2)log4j

(3)slf4j-log4j12(集成包)

###4.4.3 左下圖###

  • 現狀:目前的應用程序中已經使用了如下混雜方式的API來進行日志的編程

    • commons-logging
    • log4j
  • 改進:現在想統一將日志的輸出交給jdk-logging

  • 第一步:將上述日志系統全部無縫先切換到slf4j

(1)去掉commons-logging(其實去不去都可以),使用jcl-over-slf4j將commons-logging的底層日志輸出切換到slf4j

(2)去掉log4j1(必須去掉),使用log4j-over-slf4j,將log4j1的日志輸出切換到slf4j

  • 第二步:使slf4j選擇jdk-logging來作為底層日志輸出,加入以下jar包:

(1)slf4j-api

(2)slf4j-jdk14(集成包)

#5 沖突說明# ##5.1 jcl-over-slf4j 與 slf4j-jcl 沖突##

  • jcl-over-slf4j: commons-logging切換到slf4j
  • slf4j-jcl : slf4j切換到commons-logging

如果這兩者共存的話,必然造成相互委托,造成內存溢出。

##5.2 log4j-over-slf4j 與 slf4j-log4j12 沖突##

  • log4j-over-slf4j : log4j1切換到slf4j
  • slf4j-log4j12 : slf4j切換到log4j1

如果這兩者共存的話,必然造成相互委托,造成內存溢出。但是log4j-over-slf4內部做了一個判斷,可以防止造成內存溢出:即判斷slf4j-log4j12 jar包中的org.slf4j.impl.Log4jLoggerFactory是否存在,如果存在則表示沖突了,拋出異常提示用戶要去掉對應的jar包,代碼如下,在slf4j-log4j12 jar包的org.apache.log4j.Log4jLoggerFactory中:

##5.3 jul-to-slf4j 與 slf4j-jdk14 沖突##

  • jul-to-slf4j : jdk-logging切換到slf4j
  • slf4j-jdk14 : slf4j切換到jdk-logging

如果這兩者共存的話,必然造成相互委托,造成內存溢出。

轉載于:https://my.oschina.net/xianggao/blog/517188

總結

以上是生活随笔為你收集整理的slf4j、jcl、jul、log4j1、log4j2、logback大总结的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 天天视频黄色 | 亚洲一区福利视频 | 一级淫片在线观看 | av5566| 亚洲av鲁丝一区二区三区 | 日韩手机看片 | 1000部啪啪未满十八勿入超污 | 奇米在线观看 | 美国少妇性做爰 | 毛片毛片毛片毛片毛片毛片毛片毛片毛片毛片 | 91精品久久久久 | 91插插插插 | 久久天堂视频 | 色婷婷综合成人av | 色欲一区二区三区精品a片 在线观看黄网站 | av一区二区三区在线观看 | 95国产精品 | 99久久精品免费看国产 | 国产成人精品国内自产拍免费看 | 成人免费视频一区 | 欧美不卡在线视频 | 亚洲欧美激情小说另类 | 情趣五月天 | 日韩欧美国产网站 | 亚洲福利小视频 | 国产精品99久久久久久大便 | 毛片无遮挡| 无码人妻精品一区二区三 | 男男做爰猛烈叫床爽爽小说 | 国产免费av片在线观看 | 五月天国产 | 婷婷五月在线视频 | 8x8ⅹ国产精品一区二区 | 国产欧美一区二区三区四区 | 成人免费毛片xxx | 欧美自拍偷拍 | 99久久九九 | 色哟哟免费 | 亚洲精品免费在线 | 顶臀精品视频www | www超碰在线 | 冲田杏梨av | 色视频免费 | 蝌蚪久久 | 精品一区二区三区精华液 | 色综合久久天天综合网 | 欧美日韩国产综合网 | 亚洲在线看片 | 亚州中文字幕 | xxxxx黄色 | 91免费视频 | 狠狠久久 | 成全世界免费高清观看 | 久久波多野 | 欧美精品v国产精品v日韩精品 | 欧美成人免费播放 | 中文字幕第二页 | 边打电话边做 | 中文在线日韩 | 国产国语性生话播放 | 日韩激情视频在线观看 | 中文字幕被公侵犯的漂亮人妻 | 中文字幕日韩精品无码内射 | 午夜精品一区二 | 亚洲精品大全 | 日韩第1页 | 国产思思99re99在线观看 | 黄色在线免费看 | 天天操人人爽 | 黄色片在线免费 | 欧美性俱乐部 | 好吊日在线观看 | 香蕉视频在线观看视频 | 日韩不卡一区二区三区 | 黄色国产一级 | 911成人网| 久久狠狠干 | 亚洲色图另类图片 | 91天天看 | 一区不卡在线 | 色黄视频在线观看 | 久热精品免费视频 | 欧美自拍视频 | 邻居少妇张开腿让我爽了在线观看 | av影视在线 | 澳门黄色网 | 久久久久亚洲av无码专区首jn | 日本二区在线观看 | 99久久精品免费看国产免费软件 | 亚洲综合色成人 | 91美女免费看 | 国产黄色在线播放 | 91红桃视频 | 欧美女人交配视频 | 国产爽爽爽 | 午夜秋霞网 | 影音先锋成人资源网 | 麻豆影视国产在线观看 | 欧美日韩国产色 |