日誌框架之Slf4j整合Logback

 

什麼是Slf4j ?

Slf4J,即簡單日誌門面(Simple Logging Facade for Java),不是具體的日誌解決方案,它只服務於各種各樣的日誌系統。按照官方的說法,Slf4J是一個用於日誌系統的簡單Facade,允許最終用戶在部署其應用時使用其所希望的日誌系統。

從某種程度上,Slf4J有點類似JDBC,不過比JDBC更簡單,在JDBC中,你需要指定驅動程序,而在使用Slf4J的時候,不需要在代碼中或配置文件中指定你打算使用那個具體的日誌系統。如同使用JDBC基本不用考慮具體數據庫一樣,Slf4J提供了統一的記錄日誌的接口,只要按照其提供的方法記錄即可,最終日誌的格式、記錄級別、輸出方式等通過具體日誌系統的配置來實現,因此可以在應用中靈活切換日誌系統。

什麼是Logback?

Logback是由log4j創始人設計的又一個開源日誌組件。Logback當前分成三個模塊:

  • Logback-core
  • Logback- classic
  • Logback-access

Logback-core是其它兩個模塊的基礎模塊。Logback-classic是log4j的一個 改良版本。此外Logback-classic完整實現SLF4J API使你可以很方便地更換成其它日誌系統如log4j或JDK14 Logging。Logback-access訪問模塊與Servlet容器集成提供通過Http來訪問日誌的功能。

補充:門面模式,是指提供一個統一的接口去訪問多個子系統的多個不同的接口,它爲子系統中的一組接口提供一個統一的高層接口。使得子系統更容易使用。

Slf4j就是門面,Logback就是她的子系統。

1.快速入門

1.1 添加依賴

此處額外添加了 Junit依賴,用於單元測試,直觀展示效果

關於Junit 可以參考這篇:https://blog.csdn.net/qq_36110736/article/details/107774507

  1.  
    <!-- Slf4j 依賴 -->
  2.  
    <dependency>
  3.  
    <groupId>org.slf4j</groupId>
  4.  
    <artifactId>slf4j-api</artifactId>
  5.  
    <version>1.7.30</version>
  6.  
    </dependency>
  7.  
    <!-- logback 依賴 -->
  8.  
    <dependency>
  9.  
    <groupId>ch.qos.logback</groupId>
  10.  
    <artifactId>logback-classic</artifactId>
  11.  
    <version>1.2.3</version>
  12.  
    </dependency>
  13.  
    <!-- Junit依賴 用於單元測試-->
  14.  
    <dependency>
  15.  
    <groupId>junit</groupId>
  16.  
    <artifactId>junit</artifactId>
  17.  
    <version>4.13</version>
  18.  
    </dependency>

1.2 具體實現

  1.  
    import org.junit.Test;
  2.  
    import org.slf4j.Logger;
  3.  
    import org.slf4j.LoggerFactory;
  4.  
     
  5.  
    public class Slf4jTest {
  6.  
    public static final Logger LOGGER = LoggerFactory.getLogger(Slf4jTest.class);
  7.  
     
  8.  
    @Test
  9.  
    public void test01(){
  10.  
    //日誌輸出
  11.  
    LOGGER.error("error");
  12.  
    LOGGER.warn("wring");
  13.  
    LOGGER.info("info");
  14.  
    LOGGER.debug("debug");
  15.  
    LOGGER.trace("trance");
  16.  
     
  17.  
    //佔位符輸出
  18.  
    String name = "bysen";
  19.  
    Integer age = 24;
  20.  
    LOGGER.info("姓名{},年齡{}",name,age);
  21.  
     
  22.  
    //異常處理
  23.  
    try{
  24.  
    int i =1/0;
  25.  
    }catch (Exception e){
  26.  
    LOGGER.error("發生異常:",e);
  27.  
    }
  28.  
    }
  29.  
     
  30.  
    }

1.3 運行結果

補充:Slf4j日誌級別,重要程度由上到下

  1.  error: 用戶程序報錯,必須解決的時候使用此級別打印日誌。
  2. warn:警告,不會影響程序的運行,但是值得注意。
  3. info  一般處理業務邏輯的時候使用,就跟 system.err打印一樣,用於說明此處是幹什麼的。
  4. debug: 一般放於程序的某個關鍵點的地方,用於打印一個變量值或者一個方法返回的信息之類的信息     
  5.  trace:  一般不會使用,在日誌裏邊也不會打印出來,最低的一個日誌級別。

2.Logback中的配置文件

詳細使用可以參考:https://www.cnblogs.com/warking/p/5710303.html

Logback會依次讀取以下類型配置文件

  • logback.groovy
  • logback-test.xml
  • logback.xml
  • 如果均不存在會使用默認配置

2.1 組件之間關係

  1. Logger:日誌記錄器,關聯到應用的對應的context上後,主要用於存放日誌對象,可以定義日誌的類型級別。
  2. Appender:用於指定日誌輸出的目的地,目的地可以是控制檯,日誌,數據庫等。
  3. Layout:負責把事件轉化成字符串格式化的日誌輸出,在Logback中Layout被封裝在encoder中

在resources目錄下創建logback.xml,

  1.  
    <?xml version="1.0" encoding="utf-8" ?>
  2.  
    <configuration>
  3.  
    <property name = "ENCODER_PATTERN" value = "%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{80} - %msg%n"/>
  4.  
    <!-- 控制檯日誌:輸出全部日誌到控制檯 -->
  5.  
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
  6.  
    <!-- 控制輸出流對象,默認System.out 改爲System.err-->
  7.  
    <target>System.err</target>
  8.  
    <!-- 日誌消息格式配置-->
  9.  
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
  10.  
    <pattern>${ENCODER_PATTERN}</pattern>
  11.  
    </encoder>
  12.  
    </appender>
  13.  
    <!-- root Logger 配置-->
  14.  
    <root>
  15.  
    <appender-ref ref="console"></appender-ref>
  16.  
    </root>
  17.  
    </configuration>

再次執行,輸出結果變成如下:

參考:

https://www.cnblogs.com/renrenbinbin/archive/2012/12/25/2832525.html

https://baike.baidu.com/item/logback/5822369

https://www.cnblogs.com/rrong/p/9712623.html

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