什麼是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
-
<!-- Slf4j 依賴 -->
-
<dependency>
-
<groupId>org.slf4j</groupId>
-
<artifactId>slf4j-api</artifactId>
-
<version>1.7.30</version>
-
</dependency>
-
<!-- logback 依賴 -->
-
<dependency>
-
<groupId>ch.qos.logback</groupId>
-
<artifactId>logback-classic</artifactId>
-
<version>1.2.3</version>
-
</dependency>
-
<!-- Junit依賴 用於單元測試-->
-
<dependency>
-
<groupId>junit</groupId>
-
<artifactId>junit</artifactId>
-
<version>4.13</version>
-
</dependency>
1.2 具體實現
-
import org.junit.Test;
-
import org.slf4j.Logger;
-
import org.slf4j.LoggerFactory;
-
-
public class Slf4jTest {
-
public static final Logger LOGGER = LoggerFactory.getLogger(Slf4jTest.class);
-
-
-
public void test01(){
-
//日誌輸出
-
LOGGER.error("error");
-
LOGGER.warn("wring");
-
LOGGER.info("info");
-
LOGGER.debug("debug");
-
LOGGER.trace("trance");
-
-
//佔位符輸出
-
String name = "bysen";
-
Integer age = 24;
-
LOGGER.info("姓名{},年齡{}",name,age);
-
-
//異常處理
-
try{
-
int i =1/0;
-
}catch (Exception e){
-
LOGGER.error("發生異常:",e);
-
}
-
}
-
-
}
1.3 運行結果
補充:Slf4j日誌級別,重要程度由上到下
- error: 用戶程序報錯,必須解決的時候使用此級別打印日誌。
- warn:警告,不會影響程序的運行,但是值得注意。
- info 一般處理業務邏輯的時候使用,就跟 system.err打印一樣,用於說明此處是幹什麼的。
- debug: 一般放於程序的某個關鍵點的地方,用於打印一個變量值或者一個方法返回的信息之類的信息
- trace: 一般不會使用,在日誌裏邊也不會打印出來,最低的一個日誌級別。
2.Logback中的配置文件
詳細使用可以參考:https://www.cnblogs.com/warking/p/5710303.html
Logback會依次讀取以下類型配置文件
- logback.groovy
- logback-test.xml
- logback.xml
- 如果均不存在會使用默認配置
2.1 組件之間關係
- Logger:日誌記錄器,關聯到應用的對應的context上後,主要用於存放日誌對象,可以定義日誌的類型級別。
- Appender:用於指定日誌輸出的目的地,目的地可以是控制檯,日誌,數據庫等。
- Layout:負責把事件轉化成字符串格式化的日誌輸出,在Logback中Layout被封裝在encoder中
在resources目錄下創建logback.xml,
-
-
<configuration>
-
<property name = "ENCODER_PATTERN" value = "%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{80} - %msg%n"/>
-
<!-- 控制檯日誌:輸出全部日誌到控制檯 -->
-
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
-
<!-- 控制輸出流對象,默認System.out 改爲System.err-->
-
<target>System.err</target>
-
<!-- 日誌消息格式配置-->
-
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
-
<pattern>${ENCODER_PATTERN}</pattern>
-
</encoder>
-
</appender>
-
<!-- root Logger 配置-->
-
<root>
-
<appender-ref ref="console"></appender-ref>
-
</root>
-
</configuration>
再次執行,輸出結果變成如下:
參考:
https://www.cnblogs.com/renrenbinbin/archive/2012/12/25/2832525.html