1. 程式人生 > >日誌框架總結

日誌框架總結

classic ack AS 使用 引入 ref 簡介 mon www.

1 日誌框架簡介

(參考:http://xfhnever.com/2015/09/20/log-java-2/)
各種日誌框架可以分為兩類:

  1. 日誌實現框架:jdk自帶的logging(jul),log4j1、log4j2、logback
  2. 日誌門面,即提供統一的接口不提供實現:apache的commons-logging(jcl)、slf4j

2 日誌實現框架需要的jar包

  1. log4j:
    • log4j:log4j1的全部內容
  2. log4j2:
    • log4j-api:log4j2定義的API
    • log4j-core:log4j2上述API的實現
  3. logback:
    • logback-core:logback的核心包
    • logback-classic:logback實現了slf4j的API

3 slf4j需要的jar包

  1. slf4j-api

4 slf4j轉向具體日誌實現框架

項目中使用slf4j接口進行編程,而slf4j並沒有整整的日誌實現,需要我們加入日誌實現依賴,並引入slf4j到某個具體日誌實現的橋梁

  1. slf4j-jdk14:slf4j到jdk-logging的橋梁
  2. slf4j-log4j12:slf4j到log4j1的橋梁(之前一直以為是到log4j2的橋梁,引起錯誤)
  3. log4j-slf4j-impl:slf4j到log4j2的橋梁(log4j2使用該包)
  4. logback-classic:slf4j到logback的橋梁
  5. slf4j-jcl:slf4j到commons-logging的橋梁

5 日誌實現轉向slf4j

例如包使用log4j作為日誌實現,而我們的項目使用log4j2作為日誌實現,那麽我們可以將log4j的日誌輸出交給slf4j,slf4j再交給log4j2來輸出。這一部分主要用來進行實際的日誌框架之間的切換

  1. jul-to-slf4j:jdk-logging到slf4j的橋梁
  2. log4j-over-slf4j:log4j1到slf4j的橋梁
  3. jcl-over-slf4j:commons-logging到slf4j的橋梁

6 最佳實踐

一般使用slf4j提供統一的日誌接口,加上slf4j到具體日誌實現的橋梁,最後再引入具體的日誌實現。如使用log4j2的配置

        <!--slf4j-->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.25</version>
        </dependency>

        <!--橋梁-->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-slf4j-impl</artifactId>
            <version>2.9.1</version>
        </dependency>

        <!--log4j2-->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>2.11.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.11.0</version>
        </dependency>

參考

  1. http://xfhnever.com/2015/09/20/log-java-2/
  2. https://www.cnblogs.com/hafiz/p/6170702.html

日誌框架總結