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