logback 配置詳解-springboot
----------------------------------------------------------------------------------------------------------
springboot logback 配置詳解
在 Spring Boot 中,Logback 是默認集成的日志框架(基于 SLF4J API),相比 Log4j 等框架,它具有更高的性能和更靈活的配置。本文將詳細講解 Logback 在 Spring Boot 中的配置方式,包括核心組件、常用配置及高級特性。
一、配置文件位置與加載優先級
Spring Boot 會自動掃描類路徑(
classpath)下的 Logback 配置文件,優先加載順序如下:logback-spring.xml(推薦,支持 Spring 擴展特性,如springProfile)logback.xml(標準 Logback 配置,不支持 Spring 擴展)logback-spring.groovy/logback.groovy(Groovy 格式,較少使用)
二、核心配置組件
Logback 的配置核心由 3 個組件構成:
Logger(日志記錄器)、Appender(輸出目的地)、Layout(日志格式)。1. Logger(日志記錄器)
Logger 負責定義 “哪些類 / 包的日志需要被處理”,并指定處理級別。
- 核心屬性:
name:指定包或類的全限定名(如com.example.demo)。level:日志級別(從低到高:TRACE < DEBUG < INFO < WARN < ERROR),僅輸出 “級別≥當前設置” 的日志。additivity:是否向上級 Logger(如root)傳遞日志(默認true,可能導致重復輸出,需按需關閉)。
2. Appender(輸出目的地)
Appender 定義日志的輸出位置(如控制臺、文件),常用實現類:
| Appender 類型 | 作用 | 適用場景 |
|---|---|---|
ConsoleAppender |
輸出到控制臺 | 開發環境調試 |
FileAppender |
輸出到指定文件 | 簡單文件記錄 |
RollingFileAppender |
按規則滾動輸出到多個文件(防止文件過大) | 生產環境長期日志存儲 |
3. Layout(日志格式)
Layout 定義日志的輸出格式,常用
PatternLayout(通過pattern屬性自定義格式)。常用占位符:%d{yyyy-MM-dd HH:mm:ss.SSS}:日期時間(精確到毫秒)。%thread:當前線程名。%-5level:日志級別(左對齊,占 5 位,如INFO)。%logger{36}:Logger 名稱(通常是類名,最長 36 字符,超出省略)。%msg:日志消息。%n:換行符(跨平臺兼容)。
三、基礎配置示例
以下是一個包含 “控制臺輸出 + 文件滾動輸出” 的完整配置(
logback-spring.xml):xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 1. 定義變量(方便維護) -->
<property name="LOG_PATH" value="logs/" /> <!-- 日志文件根目錄 -->
<property name="LOG_NAME" value="app" /> <!-- 日志基礎名稱 -->
<property name="PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n" /> <!-- 日志格式 -->
<!-- 2. 控制臺輸出Appender -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>${PATTERN}</pattern> <!-- 使用上面定義的格式 -->
</layout>
</appender>
<!-- 3. 滾動文件輸出Appender(按時間+大小滾動) -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 3.1 當前日志文件路徑 -->
<file>${LOG_PATH}/${LOG_NAME}.log</file>
<!-- 3.2 滾動策略(按時間+大小分割,歸檔舊日志) -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 歸檔文件格式:logs/app-2023-10-29.0.log(每天一個文件夾,超過大小生成多個文件) -->
<fileNamePattern>${LOG_PATH}/%d{yyyy-MM-dd}/${LOG_NAME}.%i.log</fileNamePattern>
<maxFileSize>10MB</maxFileSize> <!-- 單個文件最大10MB -->
<maxHistory>7</maxHistory> <!-- 保留7天的歸檔日志 -->
<totalSizeCap>1GB</totalSizeCap> <!-- 所有日志總大小不超過1GB -->
</rollingPolicy>
<!-- 3.3 日志格式 -->
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>${PATTERN}</pattern>
</layout>
</appender>
<!-- 4. 定義Logger(指定包的日志級別) -->
<!-- 示例:com.example.demo包下的日志輸出DEBUG及以上級別,且僅通過FILE輸出(不傳遞給root) -->
<logger name="com.example.demo" level="DEBUG" additivity="false">
<appender-ref ref="FILE" />
</logger>
<!-- 5. 根Logger(默認日志處理) -->
<root level
