一.概述
这是一个日志文件,主要用来对应用程序的日志进行记录,并且可以配置日志的一些格式和规则。
二.读取机制
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.日志格式标准化。