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

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

生活随笔

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

java

Java常用日志框架介绍

發(fā)布時(shí)間:2024/9/19 java 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java常用日志框架介绍 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Java常用日志框架介紹

文章目錄

  • Java常用日志框架介紹
      • 日志接口和日志框架的區(qū)別
      • 各個(gè)框架出現(xiàn)的時(shí)間線
      • 橋接包
      • Log4j2
      • 常用搭配
        • 單獨(dú)的log4j
        • 使用JCL(commons-logging)接口的JUL
        • 使用JCL(commons-logging)接口的log4j
        • 使用slf4j接口的logback
        • 使用slf4j接口的log4j
        • 使用log4j2
        • 使用slf4j接口的log4j2

日志接口和日志框架的區(qū)別

Java有很多日志框架和主流日志接口,要熟悉Java常用日志框架,就要先學(xué)會(huì)區(qū)分日志接口和日志框架。

  • 日志接口:只提供API定義,沒(méi)有提供具體實(shí)現(xiàn)。目的是為應(yīng)用層提供標(biāo)準(zhǔn)化的使用方式。
  • 日志框架:具體的日志實(shí)現(xiàn),是提供對(duì)日志的收集/管理功能等功能的框架。

首先我們要確定一個(gè)思想先,日志接口是作為一種規(guī)范而存在的,就是我們所謂的面向接口編程,而通常一個(gè)框架往往都是面向接口進(jìn)行開(kāi)發(fā)的。

可以打個(gè)比方:所有數(shù)據(jù)庫(kù)(如MySQL,sql server)的java驅(qū)動(dòng)都是面向JDBC接口的去實(shí)現(xiàn)的,這樣就可以提供給程序員統(tǒng)一的接口(你MySQL具體是怎么實(shí)現(xiàn)數(shù)據(jù)庫(kù)連接的,管我程序員什么事情,我用JDBC接口去編程就行了,就算以后用sql server的數(shù)據(jù)庫(kù)也不影響我,我只要更換驅(qū)動(dòng)jar包就可以了,完全不影響我原來(lái)的業(yè)務(wù)代碼)。

現(xiàn)在主流就兩個(gè)日志接口:

  • SLF4J (目前好用的)
  • J.C.L(commons-logging) (比較老舊)
  • jboss-logging (沒(méi)用過(guò),不過(guò)也算主流中)

而日志框架大概有這些:

  • Log4j 最初期主流的
  • J.U.L(jdk-logging) JDK自帶的,十分簡(jiǎn)陋,幾乎沒(méi)人用
  • Log4j2 apache重構(gòu)的,但其實(shí)跟Log4j關(guān)系不大(可以說(shuō)是apache組織自己新寫的一個(gè),跟Log4j沒(méi)有太多相識(shí)的地方)
  • Logback Log4j 的原作者寫的新的日志框架

各個(gè)框架出現(xiàn)的時(shí)間線

為了看這些時(shí)間點(diǎn),我故意上網(wǎng)搜索了他們各自出現(xiàn)的時(shí)間點(diǎn),下面的時(shí)間線內(nèi)容來(lái)自:

Java日志框架演化歷史 - 知乎 (zhihu.com)

  • Log4j
  • JUL(jdk-logging)
  • JCL(commons-logging)
  • Slf4j
  • Logback
  • Log4j2
  • 時(shí)間線上最新的是Log4j2框架,但是對(duì)應(yīng)我們程序員用的是接口,所有實(shí)際上我們是面向Slf4j接口進(jìn)行編程的。

    橋接包

    實(shí)際開(kāi)發(fā)往往有可能是多種日志實(shí)現(xiàn)框架混用,而有些日志實(shí)現(xiàn)框架并不是面向Slf4j接口的。所以需要借助橋接類進(jìn)行日志的轉(zhuǎn)換,最后統(tǒng)一成一種進(jìn)行輸出。這時(shí)就是橋接框架的作用了。還有一點(diǎn)要注意的:橋接包本身不一定包含日志框架

    下面的表中,左邊為暴露的接口,右邊為套住的實(shí)現(xiàn)框架和接口。

    • jcl-over-slf4j.jar :jcl ——> slf4j (用JUL接口套到slf4j接口上面)
    • slf4j-jcl.jar :slf4j ——> jcl (用slf4j接口套到 jcl接口上面)
    • log4j-over-slf4j :log4j ——> slf4j
    • slf4j-log4j12.jar :slf4j ——> log4j
    • jul-to-slf4j :jul ——> slf4j
    • slf4j-jdk14.jar :slf4j ——> jul
    • log4j-jcl :jcl ——> log4j2
    • log4j-1.2-api :log4j ——> log4j2
    • log4j-slf4j-impl :slf4j ——> log4j2
    • log4j-jul :jul ——> log4j2
    • log4j-to-slf4j :log4j2 ——> slf4j

    slf4j-simple、logback都是slf4j的具體實(shí)現(xiàn),但log4j并不直接實(shí)現(xiàn)slf4j,原因也十分簡(jiǎn)單,因?yàn)閘og4j出來(lái)得比slf4j早,但是有專門的一層橋接slf4j-log4j12來(lái)實(shí)現(xiàn)slf4j.

    又比如我使用log4j做日志框架,但是在一個(gè)項(xiàng)目中我使用的JCL接口,在另一個(gè)項(xiàng)目中我使用的slf4j接口,現(xiàn)在我想使用JCL接口的項(xiàng)目也變成slf4j接口,這時(shí)我可以slf4j-jcl做一層橋接。

    Log4j2

    ? 為什么要故意把這個(gè)接口框架拿出來(lái)講呢,主要這個(gè)日志框架比較特別,因?yàn)樗皇侵苯用嫦騭lf4j或者J.C.L(commons-logging)去實(shí)現(xiàn)的,它比較特別。

    Log4j2并不完全兼容Log4j(和Log4j的其他版本,如:Log4j1.x),前面也說(shuō)過(guò)跟Log4j關(guān)系不大。

    Log4j2搞分離實(shí)現(xiàn),分化成log4j-api和log4j-core,log4j-api是接口,log4j-core是實(shí)現(xiàn),但它又兼容slf4j或者J.C.L(commons-logging)這些門面接口。因?yàn)檫@逼出了很多橋接包。

    常用搭配

    單獨(dú)的log4j

    <dependency><groupId>log4j</groupId><artifactId>log4j</artifactId> </dependency>

    使用JCL(commons-logging)接口的JUL

    commons-logging這個(gè)jar包用的接口J.C.L(commons-logging),不過(guò)自身默認(rèn)實(shí)現(xiàn)為JUL(jdk-logging),因?yàn)镴UL是jdk-logging,所以不用導(dǎo)入JUL的包。

    <dependency><!--JCL接口包,不過(guò)如果沒(méi)有其他日志框架的情況下,默認(rèn)使用JUL實(shí)現(xiàn)日志功能--><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId> </dependency>

    使用JCL(commons-logging)接口的log4j

    使用接口JCL(commons-logging),不過(guò)底層日志實(shí)現(xiàn)變成了log4j。

    <dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId> </dependency> <dependency><groupId>log4j</groupId><artifactId>log4j</artifactId> </dependency>

    使用slf4j接口的logback

    <dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId> </dependency> <dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId> </dependency>

    使用slf4j接口的log4j

    <dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId> </dependency> <dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><scope>test</scope> </dependency>

    使用log4j2

    <dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-api</artifactId> </dependency> <dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId> </dependency>

    使用slf4j接口的log4j2

    <dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId> </dependency> <dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-slf4j-impl</artifactId><scope>test</scope> </dependency>

    其余搭配我就不講了,直接對(duì)照橋接包和要使用的接口照套就可以了。

    與50位技術(shù)專家面對(duì)面20年技術(shù)見(jiàn)證,附贈(zèng)技術(shù)全景圖

    總結(jié)

    以上是生活随笔為你收集整理的Java常用日志框架介绍的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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