亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

混亂的Java日志體系及集成jar包梳理分析

 更新時(shí)間:2022年03月24日 15:03:03   作者:KimZing  
這篇文章主要詳細(xì)的為大家梳理分析了剪不斷理還亂的Java日志體系,以及日志系統(tǒng)涉及到的繁雜的各種集成?jar?包,有需要的朋友可以借鑒參考下,希望能夠有所幫助

一、困擾的疑惑

目前的日志框架有 jdk 自帶的logging,log4j1、log4j2、logback ,這些框架都自己定制了日志 API ,并且有相應(yīng)的實(shí)現(xiàn);

目前用于實(shí)現(xiàn)日志統(tǒng)一的框架 Apache commons-logging(jcl)、slf4j ,遵循「面向接口編程」的原則,這兩大框架可以讓用戶在程序運(yùn)行期間去選擇具體的日志實(shí)現(xiàn)系統(tǒng)(log4j1\log4j2\logback等)來(lái)記錄日志,是統(tǒng)一抽象出來(lái)的一些接口。

通俗的理解:logging、log4j、logback等都是真正負(fù)責(zé)記錄日志的小弟,而commons-logging和slf4j則是這群小弟的大哥,這些大哥本身是不去記錄日志的,只是負(fù)責(zé)接活,并分配活給某個(gè)或某幾個(gè)小弟去干。

其中需要注意的是:記錄日志是一件事,比如說(shuō)slf4j一般會(huì)讓某一個(gè)小弟去記錄日志,比如讓logback去記錄日志。但是在以前記錄日志是log4j做的事,這時(shí)候就需要把log4j的工作收回到slf4j的手中,slf4j再轉(zhuǎn)給logback,這時(shí)候只需要引入對(duì)應(yīng)的交接包就可以了。

這些日志系統(tǒng)涉及到的繁雜的各種集成 jar 包,如下:

log4j、log4j-api、log4j-core
log4j-1.2-api、log4j-jcl、log4j-slf4j-impl、log4j-jul
logback-core、logback-classic、logback-access
commons-logging
slf4j-api、slf4j-log4j12、slf4j-simple、jcl-over-slf4j、slf4j-jdk14、log4j-over-slf4j、slf4j-jcl

log4j

Apache 的一個(gè)開(kāi)放源代碼項(xiàng)目,通過(guò)使用Log4j,我們可以控制日志信息輸送的目的地是控制臺(tái)、文件、GUI組件、甚至是套接口服務(wù) 器、NT的事件記錄器、UNIX Syslog守護(hù)進(jìn)程等;用戶也可以控制每一條日志的輸出格式;通過(guò)定義每一條日志信息的級(jí)別,用戶能夠更加細(xì)致地控制日志的生成過(guò)程。這些可以通過(guò)一個(gè) 配置文件來(lái)靈活地進(jìn)行配置,而不需要修改程序代碼。最新的目前版本為log4j 1.2,maven 依賴如下:

<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>

Logback

Logback 是由 log4j 創(chuàng)始人設(shè)計(jì)的又一個(gè)開(kāi)源日記組件,Logback 當(dāng)前分成三個(gè)模塊:logback-core,logback- classic和logback-access。logback-core是其它兩個(gè)模塊的基礎(chǔ)模塊,logback-classic是log4j的一個(gè) 改良版本。此外logback-classic 完整實(shí)現(xiàn) SLF4J API 使你可以很方便地更換成其它日記系統(tǒng)如log4j或JDK14 Logging。logback-access訪問(wèn)模塊與Servlet容器集成提供通過(guò)Http來(lái)訪問(wèn)日記的功能。maven 最新依賴如下:

<dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> <version>1.1.6</version></dependency><dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.1.6</version></dependency><dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.18</version></dependency><dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-core</artifactId>
    <version>1.1.6</version>
</dependency>
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.1.6</version>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.18</version>
</dependency>

Logback 作為一個(gè)通用可靠、快速靈活的日志框架,將作為 Log4j 的替代和 SLF4J 組成新的日志系統(tǒng)的完整實(shí)現(xiàn)。Logback 聲稱具有極佳的性能,“ 某些關(guān)鍵操作,比如判定是否記錄一條日志語(yǔ)句的操作,其性能得到了顯著的提高。這個(gè)操作在LogBack中需要3納秒,而在Log4J中則需要30納秒。 LogBack 創(chuàng)建記錄器(logger)的速度也更快:13微秒,而在Log4J中需要23微秒。更重要的是,它獲取已存在的記錄器只需94納秒,而 Log4J需要2234納秒,時(shí)間減少到了1/23。跟JUL相比的性能提高也是顯著的”。另外,Logback的所有文檔是全面免費(fèi)提供的,不象Log4J那樣只提供部分免費(fèi)文檔而需要用戶去購(gòu)買付費(fèi)文檔。具體包括:

  • 更快的執(zhí)行速度
  • 更充分的測(cè)試
  • logback-classic 非常自然的實(shí)現(xiàn)了SLF4J
  • 使用XML配置文件或者Groovy
  • 自動(dòng)重新載入配置文件
  • 優(yōu)雅地從I/O錯(cuò)誤中恢復(fù)
  • 自動(dòng)清除舊的日志歸檔文件
  • 自動(dòng)壓縮歸檔日志文件
  • 謹(jǐn)慎模式
  • Lilith
  • 配置文件中的條件處理
  • 更豐富的過(guò)濾
  • Logback-access模塊,提供了通過(guò)HTTP訪問(wèn)日志的能力,是logback不可或缺的組成部分

SLF4J

簡(jiǎn)單日記門面(Facade) SLF4J 是為各種 loging APIs 提供一個(gè)簡(jiǎn)單統(tǒng)一的接口,從而使得最終用戶能夠在部署的時(shí)候配置自己希望的loging APIs實(shí)現(xiàn)。 Logging API實(shí)現(xiàn)既可以選擇直接實(shí)現(xiàn)SLF4J接的loging APIs如: NLOG4J、SimpleLogger。也可以通過(guò)SLF4J提供的API實(shí)現(xiàn)來(lái)開(kāi)發(fā)相應(yīng)的適配器如Log4jLoggerAdapter、JDK14LoggerAdapter。

Apache Common-Logging

目前廣泛使用的Java日志門面庫(kù)。通過(guò)動(dòng)態(tài)查找的機(jī)制,在程序運(yùn)行時(shí)自動(dòng)找出真正使用的日志庫(kù)。但由于它使用了ClassLoader尋找和載入底層的日志庫(kù), 導(dǎo)致了象OSGI這樣的框架無(wú)法正常工作,由于其不同的插件使用自己的ClassLoader。 OSGI的這種機(jī)制保證了插件互相獨(dú)立,然而確使Apache Common-Logging無(wú)法工作。

SLF4J 庫(kù)類似于 Apache Common-Logging。但是,他在編譯時(shí)靜態(tài)綁定真正的Log庫(kù)。使用SLF4J時(shí),如果你需要使用某一種日志實(shí)現(xiàn),那么你必須選擇正確的SLF4J的jar包的集合,如此便可以在OSGI中使用了。另外,SLF4J 支持參數(shù)化的log字符串,避免了之前為了減少字符串拼接的性能損耗而不得不寫的if(logger.isDebugEnable()),現(xiàn)在你可以直接寫:logger.debug(“current user is: {}”, user)。拼裝消息被推遲到了它能夠確定是不是要顯示這條消息的時(shí)候,但是獲取參數(shù)的代價(jià)并沒(méi)有幸免。同時(shí),日志中的參數(shù)若超過(guò)三個(gè),則需要將參數(shù)以數(shù)組的形式傳入,如:

Object[] params = {value1, value2, value3};
logger.debug(“first value: {}, second value: {} and third value: {}.”, params);

現(xiàn)在,Hibernate、Jetty、Spring-OSGi、Wicket和MINA等越來(lái)越多的開(kāi)源項(xiàng)目都已經(jīng)遷移到了SLF4J,由此可見(jiàn)SLF4J的影響力不可忽視。

二、how to use

介紹完這些日志框架后,那么這些東西怎么用,之間的依賴是什么樣子的,還有啟動(dòng)初始化的過(guò)程究竟干了什么,怎么找到相應(yīng)的實(shí)現(xiàn)類及配置的?

這四篇文章是我目前在互聯(lián)網(wǎng)上面發(fā)現(xiàn)的寫的最詳細(xì)的介紹,請(qǐng)參考:

jdk-logging、log4j、logback日志介紹及原理

三個(gè)日志系統(tǒng)的實(shí)現(xiàn)機(jī)制介紹

commons-logging與jdk-logging、log4j1、log4j2、logback的集成原理

Apache Commons-logging 通用日志框架與日志系統(tǒng)的機(jī)制介紹

SLF4J 與 jdk-logging、log4j1、log4j2、logback的集成原理

SLF4J 通用日志框架與具體日志實(shí)現(xiàn)系統(tǒng)的機(jī)制機(jī)制介紹,包括依賴的jar包,jar沖突處理等;

slf4j、jcl、jul、log4j1、log4j2、logback大總結(jié)

各個(gè)組件的jar包以及目前系統(tǒng)日志需要切換實(shí)現(xiàn)方式的方法。

<!--  =================================================  -->
<!--  日志及相關(guān)依賴(用slf4j+logback代替jcl+log4j)  -->
<!--  =================================================  -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.7</version>
</dependency>
<!-- 強(qiáng)制使用 logback的綁定 -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.1.3</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.3</version>
</dependency>
<!-- 強(qiáng)制使用 logback的綁定,這里去除對(duì)log4j 的綁定 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>99.0-does-not-exist</version>
</dependency>
<!-- slf4j 的橋接器,將第三方類庫(kù)對(duì) log4j 的調(diào)用 delegate 到 slf api 上 -->
<!-- 這個(gè)橋接器是自己做的,主要是我們依賴的類庫(kù)存在很多硬編碼的引用 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>log4j-over-slf4j</artifactId>
<version>1.7.14-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>1.7.7</version>
</dependency>
<!-- 強(qiáng)制排除 log4j 的依賴,全部 delegate 到 log4j-over-slf4j 上 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>99.0-does-not-exist</version>
</dependency>
<dependency>
<groupId>apache-log4j</groupId>
<artifactId>log4j</artifactId>
<version>999-not-exist</version>
</dependency>
<!-- slf logback 配置結(jié)束 -->

三、結(jié)束

通過(guò)上述閱讀,對(duì)「混亂的 java 日志體系」應(yīng)該有了較清楚的理解,但是真的存在項(xiàng)目需要切換日志系統(tǒng)的情況嗎?根據(jù)我的理解,很多當(dāng)你的系統(tǒng)越來(lái)越龐大,越來(lái)越復(fù)雜需要系統(tǒng)重構(gòu),解決性能的時(shí)候,可以考慮升級(jí)你當(dāng)前的日志配置。如果你是新啟用的項(xiàng)目,直接考慮使用Logback + SLF4j 即可。

以上就是Java日志體系集成jar包梳理分析示例的詳細(xì)內(nèi)容,更多關(guān)于Java日志體系集成jar包的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • JAVA多線程CountDownLatch使用詳解

    JAVA多線程CountDownLatch使用詳解

    這篇文章主要為大家詳細(xì)介紹了JAVA多線程CountDownLatch的使用,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • 解決Mapper接口和mapper.xml的文件位置問(wèn)題

    解決Mapper接口和mapper.xml的文件位置問(wèn)題

    這篇文章主要介紹了解決Mapper接口和mapper.xml的文件位置問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • Java總結(jié)篇系列:Java泛型詳解

    Java總結(jié)篇系列:Java泛型詳解

    下面小編就為大家?guī)?lái)一篇Java總結(jié)篇系列:Java泛型詳解。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-09-09
  • 基于Idea+Jconsole實(shí)現(xiàn)線程監(jiān)控步驟

    基于Idea+Jconsole實(shí)現(xiàn)線程監(jiān)控步驟

    這篇文章主要介紹了基于Idea+Jconsole實(shí)現(xiàn)線程監(jiān)控功能,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • 基于@RequestMapping 用法詳解之地址映射

    基于@RequestMapping 用法詳解之地址映射

    這篇文章主要介紹了@RequestMapping 用法詳解之地址映射,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • SpringBoot開(kāi)發(fā)實(shí)戰(zhàn)系列之定時(shí)器

    SpringBoot開(kāi)發(fā)實(shí)戰(zhàn)系列之定時(shí)器

    定時(shí)任務(wù)我想諸位童鞋都不陌生,簡(jiǎn)而言之名為“設(shè)定定時(shí)鬧鐘做某件事情”,下面這篇文章主要給大家介紹了關(guān)于SpringBoot定時(shí)器的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • Springboot項(xiàng)目如何獲取所有的接口

    Springboot項(xiàng)目如何獲取所有的接口

    這篇文章主要介紹了Springboot項(xiàng)目如何獲取所有的接口,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • 使用Maven將springboot工程打包成docker鏡像

    使用Maven將springboot工程打包成docker鏡像

    這篇文章主要介紹了使用Maven將springboot工程打包成docker鏡像,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Java之Spring注解開(kāi)發(fā)案例詳解

    Java之Spring注解開(kāi)發(fā)案例詳解

    這篇文章主要介紹了Java之Spring注解開(kāi)發(fā)案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • JDK  keytool證書工具功能代碼解析

    JDK keytool證書工具功能代碼解析

    這篇文章主要介紹了JDK keytool證書工具功能代碼解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05

最新評(píng)論