项目里刚好用到,用豆包生成以下说明,此处作为记录。
以下是一个 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"
用于防止日志重复输出(如同时输出到控制台和文件)
- 日志文件路径默认在用户目录下的
该配置可根据实际项目需求调整日志级别、文件路径和滚动策略。