用于 Spring Boot 应用的日志管理,核心作用是按级别分离日志、按时间滚动存储、仅保留 3 天日志,同时支持精细化包日志控制。
一、核心功能与配置解读
1. 基础配置(全局参数)
- debug="true":开启 Logback 内部调试模式,启动时输出配置加载细节(仅建议开发 / 调试用)。
- LOG_PATH="log/":日志存储路径(相对路径,应用启动目录下的 log 文件夹)。
- LOG_PATTERN:日志输出格式,包含「时间 + 日志级别 + 类名 + 线程名 + 日志信息」,便于问题定位。
2. 三大日志输出目标(Appender)
| Appender 名称 | 作用 | 核心特性 |
|---|---|---|
| CONSOLE | 控制台输出 | 输出所有符合级别的日志,用于实时查看。 |
| FILE | 全量日志文件 | 按天生成日志文件(命名格式 all.20241029.log),保留 3 天,总大小限制 1GB。 |
| FILE_ERROR | 错误日志文件 | 仅输出 WARN 及以上级别日志(错误、警告),独立存储便于快速排查异常,同样保留 3 天。 |
3. 日志级别与输出规则
- 全局级别(root):INFO,即默认输出 INFO、WARN、ERROR 级别日志。
- 全局日志会同时输出到「控制台 + 全量文件 + 错误文件」。
- 自定义包级别(com.example):DEBUG,该包下输出 DEBUG 及以上级别日志(更详细)。
- additivity="false":关闭日志继承,避免该包日志重复输出到父级 Appender(仅输出到自身指定的控制台 + 全量文件)。
二、实际使用效果
1.日志文件生成:
- 全量日志:log/all.20241029.log(每天一个文件)。
- 错误日志:log/error.20241029.log(仅存储警告和错误)。
2.日志清理:
- 超过 3 天的日志文件会自动删除(maxHistory=3)。
- 所有日志文件总大小超过 1GB 时,会优先删除最旧的文件(totalSizeCap=1GB)。
3.包日志差异:
- com.example 包的 DEBUG 日志(如调试信息)会输出到控制台和全量文件。
- 其他包仅输出 INFO 及以上级别日志,不包含 DEBUG 细节。
xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true">
<!-- 日志存储路径(可自定义,如 /var/log/myapp/ 或相对路径 logs/) -->
<property name="LOG_PATH" value="log/"/>
<!-- 日志输出格式 -->
<property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss} %p [Class:%C{1}->Thread:%t] %m %n"/>
<!-- 控制台日志:输出全部日志到控制台 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<Pattern>${LOG_PATTERN}</Pattern>
</encoder>
</appender>
<!-- 文件日志:输出全部日志到文件() -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/all.%d{yyyyMMdd}.log</fileNamePattern>
<!-- 保留3天的日志(超过3天自动删除) -->
<maxHistory>3</maxHistory>
<!-- 可选:限制总日志大小(防止磁盘占满,如总大小不超过1GB) -->
<totalSizeCap>1GB</totalSizeCap>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${LOG_PATTERN}</pattern>
</encoder>
</appender>
<!-- 错误日志:用于将错误日志输出到独立文件 -->
<appender name="FILE_ERROR"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/error.%d{yyyyMMdd}.log</fileNamePattern>
<!-- 保留3天的日志(超过3天自动删除) -->
<maxHistory>3</maxHistory>
<!-- 可选:限制总日志大小(防止磁盘占满,如总大小不超过1GB) -->
<totalSizeCap>1GB</totalSizeCap>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${LOG_PATTERN}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>WARN</level>
</filter>
</appender>
<!-- 全局日志级别(root 级别) -->
<root>
<level value="INFO"/>
<appender-ref ref="CONSOLE"/><!-- 输出到控制台 -->
<appender-ref ref="FILE"/> <!-- 输出到文件 -->
<appender-ref ref="FILE_ERROR"/>
</root>
<!-- 自定义包的日志级别(可选,如 com.example 包用 DEBUG 级别) -->
<logger name="com.example" level="DEBUG" additivity="false">
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
</logger>
</configuration>