1.Logback簡介
Logback是由log4j創始人設計的另一款開源日志元件,主要包括以下幾個子產品。
logback-core:logback-classic和logback-access的基礎子產品。
logback-classic:log4j的改良版本,完整實作了slf4j的API,可以友善地進行日志系統更換,如log4j。
logback-access:與Servlet容器內建的通路子產品,提供通過HTTP來通路日志的功能。
2.引入依賴
建立一個SpringBoot工程,并在pom.xml檔案中添加內建Logback所需要的dependency。
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-access</artifactId>
</dependency>
3.在resources目錄下建立logback.xml檔案,檔案内容如下所示。
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<appender name="debug" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--輸出檔案位置-->
<File>/Users/steven/Documents/代碼/springBoot/logs/debug.log</File>
<!--編碼-->
<encoder>
<pattern>[%d{HH:mm:ss.SSS}][%p][%c{200}][%t] %m%n</pattern>
<immediateFlush>true</immediateFlush>
</encoder>
<!--日志級别-->
<filter class = "ch.qos.logback.classic.filter.LevelFilter">
<level>DEBUG</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<!--滾動輸出政策,歸檔檔案名字-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>/Users/steven/Documents/代碼/springBoot/logs/debug.log.%d{yyyy-MM-dd}</fileNamePattern>
</rollingPolicy>
</appender>
<appender name="info" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>/Users/steven/Documents/代碼/springBoot/logs/info.log</File>
<encoder>
<pattern>[%d{HH:mm:ss.SSS}][%p][%c{200}][%t] %m%n</pattern>
<immediateFlush>true</immediateFlush>
</encoder>
<filter class = "ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>/Users/steven/Documents/代碼/springBoot/logs/info.log.%d{yyyy-MM-dd}</fileNamePattern>
</rollingPolicy>
</appender>
<appender name="warn" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>/Users/steven/Documents/代碼/springBoot/logs/warn.log</File>
<encoder>
<pattern>[%d{HH:mm:ss.SSS}][%p][%c{200}][%t] %m%n</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>warn</level>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>/Users/steven/Documents/代碼/springBoot/logs/warn.log.%d{yyyy-MM-dd}</fileNamePattern>
</rollingPolicy>
</appender>
<appender name="error" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>/Users/steven/Documents/代碼/springBoot/logs/error.log</File>
<encoder>
<pattern>[%d{HH:mm:ss.SSS}][%p][%c{200}][%t] %m%n</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>error</level>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>/Users/steven/Documents/代碼/springBoot/logs/error.log.%d{yyyy-MM-dd}</fileNamePattern>
</rollingPolicy>
</appender>
<!--全局日志級别-->
<!--設定某個包或者類使用哪個appender-->
<logger name="com.leichuangkj.logback" additivity="false">
<appender-ref ref="debug" />
<appender-ref ref="info"/>
<appender-ref ref="warn"/>
<appender-ref ref="error"/>
</logger>
<root level="debug"></root>
</configuration>
4.添加配置
在application.properties檔案中添加如下配置資訊。
############################################################
#
# Logback配置
#
############################################################
logging.config=classpath:logback.xml
5.測試用例
在單元測試類LogbackApplicationTests中添加如下代碼。
@SpringBootTest
class LogbackApplicationTests {
private static final org.slf4j.Logger log = LoggerFactory.getLogger(LogbackApplicationTests.class);
@Test
void contextLoads() {
log.debug("log level:debug");
log.info("log level:info");
log.warn("log level:warn");
log.error("log level:error");
}
}
右鍵執行LogbackApplicationTests單元測試,這時可以看到控制台顯示“1 test passed”以及如下列印資訊。

在日志目錄“/Users/steven/Documents/代碼/springBoot/logs”下可以看到生成如下圖所示的4個.log檔案。
各檔案内容如下所示。
//debug
[00:05:23.701][DEBUG][com.leichuangkj.logback.LogbackApplicationTests][main] Running with Spring Boot v2.3.1.RELEASE, Spring v5.2.7.RELEASE
[00:05:27.347][DEBUG][com.leichuangkj.logback.LogbackApplicationTests][main] log level:debug
//info
[00:05:23.697][INFO][com.leichuangkj.logback.LogbackApplicationTests][main] Starting LogbackApplicationTests on 192.168.0.106 with PID 8864 (started by steven in /Users/steven/Documents/代碼/springBoot/logback)
[00:05:23.701][INFO][com.leichuangkj.logback.LogbackApplicationTests][main] No active profile set, falling back to default profiles: default
[00:05:26.975][INFO][com.leichuangkj.logback.LogbackApplicationTests][main] Started LogbackApplicationTests in 4.135 seconds (JVM running for 7.461)
[00:05:27.347][INFO][com.leichuangkj.logback.LogbackApplicationTests][main] log level:info
//warn
[00:05:27.347][WARN][com.leichuangkj.logback.LogbackApplicationTests][main] log level:warn
[00:05:27.347][ERROR][com.leichuangkj.logback.LogbackApplicationTests][main] log level:error
//error
[00:05:27.347][ERROR][com.leichuangkj.logback.LogbackApplicationTests][main] log level:error