logback-spring.xml 文件

一.概述

这是一个日志文件,主要用来对应用程序的日志进行记录,并且可以配置日志的一些格式和规则。

二.读取机制

1.SpingBoot自动识别

进行文件扫描时,当在 classpath 下发现名为 logback-spring.xml 的文件时,Spring Boot 会自动加载该配置。

2.加载时机

在SpringBoot的早期阶段,早于Bean的初始化

3.配置文件优先级

Spring Boot 按以下顺序查找日志配置文件:

  • logback-spring.xml (推荐,支持 Spring Boot 特性)
  • logback-spring.groovy
  • logback.xml
  • logback.groovy

4.依赖条件

通常由 spring-boot-starter-web 自动引入,无需额外配置,Spring Boot 会自动完成初始化工作

三.主要作用

下面是一个项目的日志配置文件:

复制代码
<?xml version="1.0" encoding="UTF-8"?>
<!-- 
    Logback 配置文件,用于配置日志输出规则。
    支持自动扫描配置变更、控制台输出、文件滚动记录以及异步日志处理。
-->
<configuration scan="true" scanPeriod="60 seconds" debug="false">

    <!-- 日志存储路径配置 -->
    <property name="LOG_HOME" value="logs" />

    <!-- 标准日志输出格式定义 -->
    <property name="STANDARD_LOG_PATTERN" value="%d{yyyy-MM-dd'T'HH:mm:ss.SSSZ}|%p|%t|%c|%X{traceId}|%m%ex%n" />

    <!-- 控制台输出 Appender:将日志输出到控制台 -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${STANDARD_LOG_PATTERN}</pattern>
        </encoder>
    </appender>

    <!-- 
        ERROR 级别日志文件 Appender:
        - 输出 ERROR 级别的日志到 error.log 文件
        - 按日期和大小进行轮转压缩
        - 最大保留7天日志,总容量不超过20GB
    -->
    <appender name="SF-ERROR-APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/error.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/error.log.%d{yyyy-MM-dd}.%i.gz</fileNamePattern>
            <maxFileSize>200MB</maxFileSize>
            <!-- 按天轮转,保留 7 天 -->
            <maxHistory>7</maxHistory>
            <!-- 最多存储 20 GB 的归档文件 -->
            <totalSizeCap>20GB</totalSizeCap>
        </rollingPolicy>
        <encoder>
            <pattern>${STANDARD_LOG_PATTERN}</pattern>
        </encoder>
        <!-- 只处理 ERROR 级别日志 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- 
        业务日志文件 Appender:
        - 输出 INFO/WARN 等非 ERROR 级别日志到 biz.log 文件
        - 同样支持按日期和大小轮转压缩
        - 最大保留7天日志,总容量不超过20GB
    -->
    <appender name="SF-BIZ-APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/biz.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/biz.log.%d{yyyy-MM-dd}.%i.gz</fileNamePattern>
            <maxFileSize>200MB</maxFileSize>
            <maxHistory>7</maxHistory>
            <totalSizeCap>20GB</totalSizeCap>
        </rollingPolicy>
        <encoder>
            <pattern>${STANDARD_LOG_PATTERN}</pattern>
        </encoder>
        <!-- 排除 ERROR 级别日志 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>DENY</onMatch>
            <onMismatch>ACCEPT</onMismatch>
        </filter>
    </appender>

    <!-- 
        异步 ERROR 日志 Appender:
        - 包装 SF-ERROR-APPENDER 实现异步写入
        - 设置队列大小为1024,不丢弃任何日志
    -->
    <appender name="SF-ERROR-ASYNC-APPENDER" class="ch.qos.logback.classic.AsyncAppender">
        <!-- 不丢失日志。默认的,如果队列的80%已满,则会丢弃TRACE、DEBUG、INFO级别的日志 -->
        <discardingThreshold>0</discardingThreshold>
        <!-- 更改默认的队列的深度,该值会影响性能。默认值为256 -->
        <queueSize>1024</queueSize>
        <appender-ref ref="SF-ERROR-APPENDER"/>
    </appender>

    <!-- 
        异步业务日志 Appender:
        - 包装 SF-BIZ-APPENDER 实现异步写入
        - 设置队列大小为1024,不丢弃任何日志
    -->
    <appender name="SF-BIZ-ASYNC-APPENDER" class="ch.qos.logback.classic.AsyncAppender">
        <discardingThreshold>0</discardingThreshold>
        <queueSize>1024</queueSize>
        <appender-ref ref="SF-BIZ-APPENDER"/>
    </appender>

    <!-- 
        根日志级别设置为 info:
        - 控制台输出(生产环境应关闭)
        - 异步 ERROR 和 BIZ 日志输出
    -->
    <root level="info">
        <!-- 生产环境必需关闭 CONSOLE -->
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="SF-ERROR-ASYNC-APPENDER"/>
        <appender-ref ref="SF-BIZ-ASYNC-APPENDER"/>
    </root>

</configuration>

1.配置文件根元素定义:

复制代码
<configuration scan="true" scanPeriod="60 seconds" debug="false">

启用了配置文件动态扫描功能,每60秒检查一次配置文件是否发生变化,如有变化会自动重新加载配置,debug='false'表示不会输出Logback自身的调试日志。

2.日志输出设置

  • 控制台输出: 用于开发调试阶段实时查看日志

  • 文件输出: 将日志持久化存储到文件系统

    复制代码
      <property name="LOG_HOME" value="logs" />
    
      <!-- 标准日志输出格式定义 -->
      <property name="STANDARD_LOG_PATTERN" value="%d{yyyy-MM-dd'T'HH:mm:ss.SSSZ}|%p|%t|%c|%X{traceId}|%m%ex%n" />
    
      <!-- 控制台输出 Appender:将日志输出到控制台 -->
      <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
          <encoder>
              <pattern>${STANDARD_LOG_PATTERN}</pattern>
          </encoder>
      </appender>

3.分类存储

  • 错误日志: 仅记录 ERROR 级别日志到 error.log 文件
  • 业务日志: 记录除 ERROR 外的其他日志到 biz.log 文件

4.日志轮转策略

复制代码
<!-- 
        ERROR 级别日志文件 Appender:
        - 输出 ERROR 级别的日志到 error.log 文件
        - 按日期和大小进行轮转压缩
        - 最大保留7天日志,总容量不超过20GB
    -->
    <appender name="SF-ERROR-APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/error.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/error.log.%d{yyyy-MM-dd}.%i.gz</fileNamePattern>
            <maxFileSize>200MB</maxFileSize>
            <!-- 按天轮转,保留 7 天 -->
            <maxHistory>7</maxHistory>
            <!-- 最多存储 20 GB 的归档文件 -->
            <totalSizeCap>20GB</totalSizeCap>
        </rollingPolicy>
        <encoder>
            <pattern>${STANDARD_LOG_PATTERN}</pattern>
        </encoder>

5.性能优化

使用异步策略去同步日志。

复制代码
    <!-- 
        异步 ERROR 日志 Appender:
        - 包装 SF-ERROR-APPENDER 实现异步写入
        - 设置队列大小为1024,不丢弃任何日志
    -->
    <appender name="SF-ERROR-ASYNC-APPENDER" class="ch.qos.logback.classic.AsyncAppender">
        <!-- 不丢失日志。默认的,如果队列的80%已满,则会丢弃TRACE、DEBUG、INFO级别的日志 -->
        <discardingThreshold>0</discardingThreshold>
        <!-- 更改默认的队列的深度,该值会影响性能。默认值为256 -->
        <queueSize>1024</queueSize>
        <appender-ref ref="SF-ERROR-APPENDER"/>
    </appender>

    <!-- 
        异步业务日志 Appender:
        - 包装 SF-BIZ-APPENDER 实现异步写入
        - 设置队列大小为1024,不丢弃任何日志
    -->
    <appender name="SF-BIZ-ASYNC-APPENDER" class="ch.qos.logback.classic.AsyncAppender">
        <discardingThreshold>0</discardingThreshold>
        <queueSize>1024</queueSize>
        <appender-ref ref="SF-BIZ-APPENDER"/>
    </appender>

6.日志格式标准化。

相关推荐
一叶飘零_sweeeet3 小时前
SPI 机制深度剖析:Java、Spring、Dubbo 的服务发现哲学与实战指南
java·spring·dubbo
abigalexy8 小时前
深入图解Spring Cloud底层设计
spring·spring cloud
越来越无动于衷11 小时前
代理模式深度解析:从静态代理到 Spring AOP 实现
java·spring·代理模式
喂完待续11 小时前
【序列晋升】12 Spring Boot 约定优于配置
java·spring boot·spring·架构·约定大于配置·序列晋升·tech arch
ankleless15 小时前
Spring 框架深度解析:从核心原理到实战应用
java·spring
带刺的坐椅15 小时前
Spring AOP 与 Solon AOP 有什么区别?
java·spring·solon·aop
l1t16 小时前
DeepSeek辅助编写的将xlsx格式文件中sheet1.xml按需分别保留或去掉标签的程序
xml·python·excel·wps·xlsx
l1t16 小时前
分析xml标签属性和压缩级别对xlsx文件读取解析的影响
xml·开发语言·python·sql·duckdb
寒士obj2 天前
Spring容器Bean的创建流程
java·后端·spring