在Spring、Springboot中使用slf4j+logback日誌框架的實現方案

第一章 介紹

1.1 爲什麼有日誌及框架?

  1. 跟蹤用戶對系統訪問
  2. 統計
  3. Debug

1.2 日誌框架

市場上存在非常多的日誌框架。

JUL(java.util.logging),JCL(Jakarta Commons Logging),Log4jLog4j2Logback(具體框架,springboot使用)SLF4j、jboss-logging等。

Spring 在框架內部使用JCL。

Log4j被apache收購,升級,改爲log4j2,框架改動很大,只是借用之名。

Log4j,Logback,SLF4j都是同一個作者。

日誌門面類似於接口,是一種規範,具體日誌實現爲這種規範下的一個落地實現產品。

1.3 優選slf4j+logback

第二章 原理

2.1 如何在系統中使用slf4j+logback

https://www.slf4j.org

2.2 使用slf4j+其他實現

需要中間的一個適配器包,去適配slf4j門面。

第三章 歷史遺留問題

3.1 遺留問題解決

如何將這些框架統一日誌記錄,統一使用slf4j進行輸出?

springboot(slf4j+logback): Spring(commons-logging)、Hibernate(jboss-logging)、MyBatis、xxxx

https://www.slf4j.org/legacy.html

引入一個偷樑換柱包,使框架依賴的日誌框架接口依然爲老的接口,但具體內部方法實現已改爲調用slf4j的接口。

3.2 將應用中所使用的日誌框架commons-logging排除掉

3.3 引入jcl轉換爲slf4j依賴包(偷樑換柱)

     <dependency>

       <groupId>org.slf4j</groupId>

       <artifactId>jcl-over-slf4j</artifactId><!-- 替換commons-logging-->

       <version>1.7.25</version>

     </dependency>

第四章 我們的選擇-優選slf4j+logback

4.1 將系統中其他日誌框架先排除出去;(所有項目)

4.2 用中間包來替換原有的日誌框架

     <dependency>

       <groupId>org.slf4j</groupId>

       <artifactId>jcl-over-slf4j</artifactId><!-- 替換commons-logging-->

       <version>1.7.25</version>

     </dependency> 

     <dependency>

       <groupId>org.slf4j</groupId>

       <artifactId>jul-to-slf4j</artifactId><!-- 替換java.util.logging-->

       <version>1.7.25</version>

     </dependency>

jul用不用導入是需要根據你項目中要用到的框架是否依賴jul有關

4.3 我們slf4j及其他的實現

     <dependency>

       <groupId>ch.qos.logback</groupId>

       <artifactId>logback-classic</artifactId><!-- 間接依賴logback-core--><!-- 優秀的日誌實現-->

     </dependency>     

     <!-- slf4j(門面): Simple Logging Facade for Java :簡單日誌門面(接口)(類似JDBC);

          log4j:日誌實現(類似數據庫驅動);

          log4j2(實現), logback(實現),

          後來我們用slf4j+logback(最穩定的方案); -->

     <dependency>

       <groupId>org.slf4j</groupId>

       <artifactId>slf4j-api</artifactId><!-- 抽象層,接口-->

     </dependency>

4.4 測試代碼

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

public class HelloWorld {

  public static void main(String[] args) {

       Logger logger = LoggerFactory.getLogger(TestLog.class);

       logger.debug("debug..."); //用於調試程序

       logger.info("info...");//用於請求處理提示消息

       logger.warn("warn...");//用於警告處理提示消息

       logger.error("error...");//用於異常處理提示消息

       logger.error("==>>"+logger.getClass());

       //class ch.qos.logback.classic.Logger

}

}

4.5 配置文件logback.xml

每一個日誌的實現框架都有自己的配置文件。使用slf4j以後,配置文件還是做成日誌實現框架自己本身的配置文件

<?xml version="1.0" encoding="UTF-8"?>

<configuration debug="true">

    <!-- 指定日誌輸出的地方-->

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">

        <encoder>

            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{360} - %msg%n</pattern>

        </encoder>

    </appender>

    <!-- 日誌:從低到高;只會打印指定級別以後的; additivity表示是否將日誌信息反饋給root

     DEBUG==》INFO===》WARN===》ERROR

     <logger name="com.atguigu.atcrowdfunding.mapper" level="debug" additivity="false"> 

         <appender-ref ref="STDOUT"/> 

     </logger>

      -->

     <root level="info">

         <appender-ref ref="STDOUT" />

     </root>

</configuration>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章