logback-spring.xml文件说明

发布于:2025-09-13 ⋅ 阅读:(22) ⋅ 点赞:(0)

项目里刚好用到,用豆包生成以下说明,此处作为记录。

以下是一个 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>

配置说明:

  1. 核心特性

    • 支持 Spring Profile 区分环境(开发 / 测试 / 生产)
    • 日志同时输出到控制台和文件
    • 按级别分离日志(普通日志和错误日志分开存储)
    • 自动滚动日志文件(按天分割,自动压缩旧文件)
  2. 主要配置项解释

    • <property>:定义全局变量(如日志格式、文件路径)
    • <appender>:日志输出目的地配置
      • CONSOLE:控制台输出,适合开发环境
      • FILE_INFO:普通日志文件输出(INFO 级别,不含 ERROR)
      • FILE_ERROR:错误日志单独输出(仅 ERROR 级别)
    • <springProfile>:结合 Spring 环境的日志级别控制
      • 开发环境(dev):输出 DEBUG 级别日志,便于调试
      • 生产环境(prod):只输出 WARN 及以上级别,减少日志量
    • <logger>:针对特定包或类的日志级别配置,可覆盖 root 配置
  3. 使用技巧

    • 日志文件路径默认在用户目录下的 logs/myapp 文件夹,可通过系统变量 LOG_PATH 或 LOG_FILE 自定义
    • 生产环境中通过限制日志级别和保留天数,避免磁盘空间耗尽
    • additivity="false" 用于防止日志重复输出(如同时输出到控制台和文件)

该配置可根据实际项目需求调整日志级别、文件路径和滚动策略。

    


网站公告

今日签到

点亮在社区的每一天
去签到