項目里剛好用到,用豆包生成以下說明,此處作為記錄。
以下是一個?logback-spring.xml
?配置文件示例,結合了 Spring Boot 特性,支持環境區分、日志滾動和不同級別日志輸出,并包含詳細注釋:
<?xml version="1.0" encoding="UTF-8"?>
<!--?logback-spring.xml 是 Spring Boot 推薦的 logback 配置文件名相比 logback.xml,它能更好地與 Spring 環境集成(如使用 springProfile 標簽)
-->
<configuration scan="true" scanPeriod="60 seconds" debug="false"><!-- 1. 定義日志格式和變量 --><property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n" /><property name="LOG_FILE_PATH" value="${LOG_FILE:-${LOG_PATH:-${user.home}/logs}}/myapp" /><!-- 2. 控制臺輸出配置 --><appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"><!-- 控制臺輸出編碼器 --><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><!-- 使用定義的日志格式 --><pattern>${LOG_PATTERN}</pattern><!-- 字符編碼 --><charset>UTF-8</charset></encoder><!-- 控制臺輸出過濾器:只輸出 INFO 及以上級別日志(可根據需要調整) --><filter class="ch.qos.logback.classic.filter.ThresholdFilter"><level>INFO</level></filter></appender><!-- 3. 普通日志文件輸出(INFO 及以上級別,按天滾動) --><appender name="FILE_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender"><!-- 日志文件路徑和名稱 --><file>${LOG_FILE_PATH}/info.log</file><!-- 滾動策略:按時間滾動(每天一個文件) --><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!-- 滾動后文件的命名格式(包含日期和.gz壓縮) --><fileNamePattern>${LOG_FILE_PATH}/info.%d{yyyy-MM-dd}.log.gz</fileNamePattern><!-- 日志文件保留天數 --><maxHistory>30</maxHistory><!-- 總日志大小限制(超過后刪除舊文件) --><totalSizeCap>10GB</totalSizeCap></rollingPolicy><!-- 過濾器:只輸出 INFO 級別日志(不包含 ERROR) --><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>ERROR</level><onMatch>DENY</onMatch> <!-- 匹配到 ERROR 級別則拒絕 --><onMismatch>ACCEPT</onMismatch> <!-- 不匹配則接受 --></filter><!-- 文件輸出編碼器 --><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><pattern>${LOG_PATTERN}</pattern><charset>UTF-8</charset></encoder></appender><!-- 4. 錯誤日志文件輸出(ERROR 級別,單獨存儲) --><appender name="FILE_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${LOG_FILE_PATH}/error.log</file><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>${LOG_FILE_PATH}/error.%d{yyyy-MM-dd}.log.gz</fileNamePattern><maxHistory>30</maxHistory><totalSizeCap>5GB</totalSizeCap></rollingPolicy><!-- 過濾器:只輸出 ERROR 級別日志 --><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>ERROR</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><pattern>${LOG_PATTERN}</pattern><charset>UTF-8</charset></encoder></appender><!-- 5. 多環境日志級別配置(結合 Spring Profile) --><!-- 開發環境:日志級別為 DEBUG,輸出到控制臺和文件 --><springProfile name="dev"><root level="DEBUG"><appender-ref ref="CONSOLE" /><appender-ref ref="FILE_INFO" /><appender-ref ref="FILE_ERROR" /></root><!-- 特定包的日志級別(如 MyBatis 日志調為 INFO,避免 DEBUG 日志過多) --><logger name="org.mybatis" level="INFO" additivity="false"><appender-ref ref="CONSOLE" /></logger></springProfile><!-- 測試環境:日志級別為 INFO,輸出到文件 --><springProfile name="test"><root level="INFO"><appender-ref ref="FILE_INFO" /><appender-ref ref="FILE_ERROR" /></root></springProfile><!-- 生產環境:日志級別為 WARN,輸出到文件,限制日志量 --><springProfile name="prod"><root level="WARN"><appender-ref ref="FILE_INFO" /><appender-ref ref="FILE_ERROR" /></root><!-- 生產環境中,特定業務包日志級別設為 INFO --><logger name="com.example.business" level="INFO" additivity="false"><appender-ref ref="FILE_INFO" /></logger></springProfile><!-- 6. 自定義 logger 示例(針對特定包或類) --><!-- additivity="false" 表示不向上級 logger 傳遞日志,避免重復輸出 --><logger name="com.example.controller" level="INFO" additivity="false"><appender-ref ref="CONSOLE" /><appender-ref ref="FILE_INFO" /></logger>
</configuration>
配置說明:
核心特性:
- 支持 Spring Profile 區分環境(開發 / 測試 / 生產)
- 日志同時輸出到控制臺和文件
- 按級別分離日志(普通日志和錯誤日志分開存儲)
- 自動滾動日志文件(按天分割,自動壓縮舊文件)
主要配置項解釋:
<property>
:定義全局變量(如日志格式、文件路徑)<appender>
:日志輸出目的地配置CONSOLE
:控制臺輸出,適合開發環境FILE_INFO
:普通日志文件輸出(INFO 級別,不含 ERROR)FILE_ERROR
:錯誤日志單獨輸出(僅 ERROR 級別)
<springProfile>
:結合 Spring 環境的日志級別控制- 開發環境(dev):輸出 DEBUG 級別日志,便于調試
- 生產環境(prod):只輸出 WARN 及以上級別,減少日志量
<logger>
:針對特定包或類的日志級別配置,可覆蓋 root 配置
使用技巧:
- 日志文件路徑默認在用戶目錄下的?
logs/myapp
?文件夾,可通過系統變量?LOG_PATH
?或?LOG_FILE
?自定義 - 生產環境中通過限制日志級別和保留天數,避免磁盤空間耗盡
additivity="false"
?用于防止日志重復輸出(如同時輸出到控制臺和文件)
- 日志文件路徑默認在用戶目錄下的?
該配置可根據實際項目需求調整日志級別、文件路徑和滾動策略。
? ??