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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

java log4j logback jcl_知识总结-Java日志框架Log4j、Log4j2、logback、slf4j、简介

發(fā)布時(shí)間:2025/3/21 java 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java log4j logback jcl_知识总结-Java日志框架Log4j、Log4j2、logback、slf4j、简介 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

功能簡(jiǎn)介

上一篇介紹了為什么打印日志、什么時(shí)候打印日志以及怎么打印日志。本篇介紹下在項(xiàng)目開發(fā)中常見的日志組件以及關(guān)系。

先看一張圖

接口:將所有日志實(shí)現(xiàn)適配到了一起,用統(tǒng)一的接口調(diào)用。

實(shí)現(xiàn):目前主流的日志實(shí)現(xiàn)。

日志門面

SLF4J

SLF4J,即簡(jiǎn)單日志門面(Simple Logging Facade for Java),不是具體的日志解決方案,而是通過(guò)Facade Pattern提供一些Java logging API,它只服務(wù)于各種各樣的日志系統(tǒng)。按照官方的說(shuō)法,SLF4J是一個(gè)用于日志系統(tǒng)的簡(jiǎn)單Facade,允許最終用戶在部署其應(yīng)用時(shí)使用其所希望的日志系統(tǒng)。

例子

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

public class LogTest {

private static Log logger = LogFactory.getLog(this.getClass());

}

slf4j靜態(tài)綁定原理:SLF4J 會(huì)在編譯時(shí)會(huì)綁定org.slf4j.impl.StaticLoggerBinder; 該類里面實(shí)現(xiàn)對(duì)具體日志方案的綁定接入。任何一種基于slf4j 的實(shí)現(xiàn)都要有一個(gè)這個(gè)類。如:org.slf4j.slf4j-log4j12-1.5.6: 提供對(duì) log4j 的一種適配實(shí)現(xiàn)。注意:如果有任意兩個(gè)實(shí)現(xiàn)slf4j 的包同時(shí)出現(xiàn),那么就可能出現(xiàn)問(wèn)題(mvn dependency:tree排查)。

common-logging

common-logging,是apache提供的一個(gè)通用的日志接口。用戶可以自由選擇第三方的日志組件作為具體實(shí)現(xiàn),像log4j,或者jdk自帶的logging, common-logging會(huì)通過(guò)動(dòng)態(tài)查找的機(jī)制,在程序運(yùn)行時(shí)自動(dòng)找出真正使用的日志庫(kù)

common-logging動(dòng)態(tài)查找原理:Log 是一個(gè)接口聲明。LogFactory 的內(nèi)部會(huì)去裝載具體的日志系統(tǒng),并獲得實(shí)現(xiàn)該Log 接口的實(shí)現(xiàn)類。LogFactory 內(nèi)部裝載日志系統(tǒng)的流程如下:

  • 首先,尋找org.apache.commons.logging.LogFactory 屬性配置。
  • 利用JDK1.3 開始提供的service 發(fā)現(xiàn)機(jī)制,會(huì)掃描classpah 下的META-INF/services/org.apache.commons.logging.LogFactory文件,若找到則裝載里面的配置,使用里面的配置。
  • 從Classpath 里尋找commons-logging.properties ,找到則根據(jù)里面的配置加載。
  • 使用默認(rèn)的配置:如果能找到Log4j 則默認(rèn)使用log4j 實(shí)現(xiàn),如果沒(méi)有則使用JDK14Logger 實(shí)現(xiàn),再?zèng)]有則使用commons-logging 內(nèi)部提供的SimpleLog 實(shí)現(xiàn)。
  • 從上述加載流程來(lái)看,只要引入了log4j 并在classpath 配置了log4j.xml ,則commons-logging 就會(huì)使log4j 使用正常,而代碼里不需要依賴任何log4j 的代碼。

    slf4j 與 common-logging 比較

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

    slf4j在編譯時(shí)靜態(tài)綁定真正的Log庫(kù),因此可以再OSGI中使用。另外,SLF4J 支持參數(shù)化的log字符串,避免了之前為了減少字符串拼接的性能損耗而不得不寫的if(logger.isDebugEnable()),現(xiàn)在你可以直接寫:logger.debug(“current user is: {}”, user)。拼裝消息被推遲到了它能夠確定是不是要顯示這條消息的時(shí)候,但是獲取參數(shù)的代價(jià)并沒(méi)有幸免。

    常見日志實(shí)現(xiàn)

    Log4j

    2種配置文件、3個(gè)主要組件、7種日志級(jí)別

    Log4j是Apache的一個(gè)開放源代碼項(xiàng)目,通過(guò)使用Log4j,可以控制日志信息輸送的目的地是控制臺(tái)、文件、數(shù)據(jù)庫(kù)等;也可以控制每一條日志的輸出格式;通過(guò)定義每一條日志信息的級(jí)別,我們能夠更加細(xì)致地控制日志的生成過(guò)程。

    Log4j有7種不同的log級(jí)別,按照等級(jí)從低到高依次為:TRACE、DEBUG、INFO、WARN、ERROR、FATAL、OFF。如果配置為OFF級(jí)別,表示關(guān)閉log。

    Log4j支持兩種格式的配置文件:properties和xml。包含三個(gè)主要的組件:Logger、appender、Layout。

    Log4j2

    log4j2和log4j是一個(gè)作者,只不過(guò)log4j2是重新架構(gòu)的一款日志組件,他拋棄了之前l(fā)og4j的不足,以及吸取了優(yōu)秀的logback的設(shè)計(jì)重新推出的一款新組件。

    1. 插件式結(jié)構(gòu) Log4j 2支持插件式結(jié)構(gòu)。我們可以根據(jù)自己的需要自行擴(kuò)展Log4j 2. 我們可以實(shí)現(xiàn)自己的appender、logger、filter。 2. 配置文件優(yōu)化 在配置文件中可以引用屬性,還可以直接替代或傳遞到組件。而且支持json格式的配置文件。不像其他的日志框架,它在重新配置的時(shí)候不會(huì)丟失之前的日志文件。3. Java 5的并發(fā)性 Log4j 2利用Java 5中的并發(fā)特性支持,盡可能地執(zhí)行最低層次的加鎖。解決了在log4j 1.x中存留的死鎖的問(wèn)題。 4. 異步logger Log4j 2是基于LMAX Disruptor庫(kù)的。在多線程的場(chǎng)景下,和已有的日志框架相比,異步的logger擁有10倍左右的效率提升。

    LogBack

    Logback是由log4j創(chuàng)始人設(shè)計(jì)的又一個(gè)開源日記組件。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)日記的功能。

    Log4j 與 LogBack 比較

    LogBack作為一個(gè)通用可靠、快速靈活的日志框架,將作為L(zhǎng)og4j的替代和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相比的性能提高也是顯著的”。

    備注常見組合

  • slf4j+logback
  • slf4j+log4j2
  • 總結(jié)

    以上是生活随笔為你收集整理的java log4j logback jcl_知识总结-Java日志框架Log4j、Log4j2、logback、slf4j、简介的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。