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.日志格式标准化。