Logback 是 Spring Boot 默認集成的日志框架,相比 Log4j,它性能更高、配置更靈活,并且天然支持 Spring Profile 多環境配置。以下是詳細配置步驟及常用配置示例。
一、添加依賴(非 Spring Boot 項目)
若項目未使用 Spring Boot,需手動添加 Logback 依賴:
<!-- Maven 依賴 -->
<dependencies><!-- Logback 核心 --><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.4.14</version></dependency><!-- 支持 Spring Profile 配置 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId><version>3.2.0</version></dependency>
</dependencies>
二、Logback 配置文件
配置文件名為 logback-spring.xml
(Spring 推薦命名,logback-spring.xml,SpringBoot會自動加載),放置在 src/main/resources
目錄下。
完整配置示例
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="30 seconds"><!-- 通用日志格式 --><property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n" /><!-- 日志文件路徑 --><property name="LOG_DIR" value="logs" /><property name="LOG_FILE" value="${LOG_DIR}/app.log" /><!-- 控制臺輸出(開發環境) --><appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>${LOG_PATTERN}</pattern></encoder><!-- 僅 dev 環境啟用 name ="dev" dev是application.yaml文件中的spring.profiles.active的值 --><springProfile name="dev"><filter class="ch.qos.logback.classic.filter.ThresholdFilter"><level>DEBUG</level></filter></springProfile></appender><!-- 滾動文件輸出(生產環境) --><appender name="ROLLING_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${LOG_FILE}</file><encoder><pattern>${LOG_PATTERN}</pattern></encoder><!-- 滾動策略:按時間 + 大小 --><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><fileNamePattern>${LOG_DIR}/app-%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern><maxFileSize>100MB</maxFileSize><maxHistory>30</maxHistory><totalSizeCap>10GB</totalSizeCap></rollingPolicy></appender><!-- 異步日志(提升性能) --><appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender"><queueSize>1024</queueSize><discardingThreshold>0</discardingThreshold><appender-ref ref="ROLLING_FILE" /></appender><!-- 日志記錄器配置 --><root level="INFO"><appender-ref ref="CONSOLE" /><appender-ref ref="ASYNC" /></root><!-- MyBatis SQL 日志 --><logger name="com.example.mapper" level="DEBUG" additivity="false"><appender-ref ref="CONSOLE" /></logger><!-- Spring 框架日志降級 --><logger name="org.springframework" level="WARN" />
</configuration>
注:日志文件如果不是logback-spring.xml的名字,springProfile配置會讀取不到dev
或prod
等環境變量的值
三、核心配置詳解
1. 全局配置
<configuration scan="true" scanPeriod="30 seconds">
啟用配置文件熱更新,每隔 30 秒檢查配置變化。<property>
定義變量(如LOG_PATTERN
),便于復用。
2. 輸出器(Appenders)
a. 控制臺輸出(ConsoleAppender)
<encoder>
:定義日志格式,%d
表示時間,%thread
為線程名,%-5level
左對齊日志級別。<springProfile>
:根據 Spring Profile 動態啟用(如僅dev
環境輸出 DEBUG 級別)。
b. 滾動文件輸出(RollingFileAppender)
<rollingPolicy>
:SizeAndTimeBasedRollingPolicy
:按時間和文件大小滾動。fileNamePattern
:歸檔文件名(%i
為滾動序號,.gz
自動壓縮)。maxFileSize
:單個文件最大大小(觸發滾動)。maxHistory
:保留最近 30 天日志。totalSizeCap
:日志總量上限(避免磁盤占滿)。
c. 異步輸出(AsyncAppender)
<queueSize>
:異步隊列大小(默認 256,增大可減少阻塞)。<discardingThreshold>
:隊列剩余容量閾值(0 表示隊列滿時丟棄 INFO 以下日志)。
3. 日志記錄器(Loggers)
<root>
:根記錄器,所有日志的默認配置。<logger>
:name
:包或類名(如com.example.mapper
)。level
:日志級別(優先級高于root
)。additivity="false"
:禁止向上傳遞日志事件(避免重復輸出)。
四、Spring Profile 多環境配置
通過 springProfile
標簽實現環境差異化配置:
<!-- 開發環境:輸出 DEBUG 到控制臺 name ="dev" dev是application.yaml文件中的spring.profiles.active的值 -->
<springProfile name="dev"><root level="DEBUG"><appender-ref ref="CONSOLE" /></root>
</springProfile><!-- 生產環境:僅輸出 ERROR 到文件 name ="prod" prod是application.yaml文件中的spring.profiles.active的值-->
<springProfile name="prod"><root level="INFO"><appender-ref ref="ASYNC" /></root><logger name="com.example" level="WARN" />
</springProfile>
五、代碼中使用日志
在類中通過 SLF4J API 記錄日志:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;@Service
public class UserService {private static final Logger logger = LoggerFactory.getLogger(UserService.class);public void createUser(String username) {logger.debug("創建用戶: {}", username); // DEBUG 級別需配置對應 Loggerlogger.info("用戶創建成功: {}", username);}
}
六、常見問題排查
-
日志未輸出
- 檢查
logback-spring.xml
是否在src/main/resources
目錄。 - 確認依賴無沖突(排除其他日志框架如 Log4j)。
- 檢查日志級別是否允許(如
DEBUG
需 Logger 和 Root 均開啟)。
- 檢查
-
滾動文件未生成
- 確認
LOG_DIR
路徑存在且有寫入權限。 - 檢查
fileNamePattern
是否符合預期(如日期格式)。
- 確認
-
性能問題
- 使用異步 Appender 并增加
queueSize
。 - 避免高頻輸出
DEBUG
日志(生產環境關閉)。
- 使用異步 Appender 并增加
七、總結
通過 Logback 可實現:
- 多環境差異化配置:利用
springProfile
標簽。 - 高效日志管理:異步輸出 + 滾動歸檔。
- 精細化日志控制:按包或類設置級別。
建議生產環境配置:
- 使用
AsyncAppender
提升性能。 - 限制
maxHistory
和totalSizeCap
防止磁盤溢出。 - 關閉非必要
DEBUG
日志。