目录
[1. 日志滚动策略简介](#1. 日志滚动策略简介)
[2. 核心配置参数解析](#2. 核心配置参数解析)
[2.1 必选参数](#2.1 必选参数)
[2.2 可选参数](#2.2 可选参数)
[3. 按日期与大小分割日志](#3. 按日期与大小分割日志)
[3.1 基础配置示例](#3.1 基础配置示例)
[3.2 文件生成规则](#3.2 文件生成规则)
[4. 自动创建分级目录](#4. 自动创建分级目录)
[4.1 按月份归档日志](#4.1 按月份归档日志)
[4.2 多级目录配置](#4.2 多级目录配置)
[5. 常见问题与排查技巧](#5. 常见问题与排查技巧)
[5.1 日志日期错乱](#5.1 日志日期错乱)
[5.2 文件未按大小分割](#5.2 文件未按大小分割)
[6. 最佳实践与避坑指南](#6. 最佳实践与避坑指南)
[6.1 时间同步](#6.1 时间同步)
[6.2 配置验证](#6.2 配置验证)
[6.3 版本管理](#6.3 版本管理)
[6.4 日志监控](#6.4 日志监控)
1. 日志滚动策略简介
Logback 的日志滚动(Rolling)功能允许开发者根据时间或文件大小自动切割、压缩和管理日志文件。通过合理配置,可实现:
- 时间滚动:按日、月、年生成日志文件。
- 大小滚动:单个文件超过阈值后分割新文件。
- 智能归档:自动清理旧日志,避免磁盘爆满。
2. 核心配置参数解析
2.1 必选参数
-
<fileNamePattern>
定义归档日志的命名规则,支持日期格式(
%d
)和索引编号(%i
)。
示例 :app.%d{yyyy-MM-dd}.%i.log.gz
%d{yyyy-MM-dd}
:按天分割文件%i
:同一天内文件超过大小后的递增编号.gz
:自动压缩为 Gzip 格式
-
<maxFileSize>
单个日志文件的最大大小,触发滚动操作。
示例 :10MB
、1GB
-
<maxHistory>
保留历史日志文件的最大天数。
示例 :30
(保留最近 30 天日志)
2.2 可选参数
-
<totalSizeCap>
所有归档日志的总大小上限,超出后删除最旧文件。
示例 :10GB
-
<cleanHistoryOnStart>
应用启动时清理过期日志。
示例 :true
3. 按日期与大小分割日志
3.1 基础配置示例
XML
<configuration>
<!-- 定义日志存储目录 -->
<property name="LOG_DIR" value="./logs" />
<appender name="APP_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 当前活跃日志文件 -->
<file>${LOG_DIR}/app.log</file>
<!-- 滚动策略:按天和大小分割 -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 归档文件名规则 -->
<fileNamePattern>${LOG_DIR}/app.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
<!-- 单个文件最大 50MB -->
<maxFileSize>50MB</maxFileSize>
<!-- 保留 30 天日志 -->
<maxHistory>30</maxHistory>
</rollingPolicy>
<!-- 日志格式 -->
<encoder>
<pattern>%date [%thread] %level %logger - %msg%n</pattern>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="APP_LOG" />
</root>
</configuration>
3.2 文件生成规则
- 每日零点 :生成新文件(如
app.2025-03-18.0.log.gz
)。 - 大小触发 :若单日日志超过
50MB
,生成递增文件(如app.2025-03-18.1.log.gz
)。
4. 自动创建分级目录
4.1 按月份归档日志
若需将日志按月份存储到不同文件夹,使用 aux
标记辅助日期字段:
XML
<fileNamePattern>
${LOG_DIR}/%d{yyyy-MM, aux}/app.%d{yyyy-MM-dd}.%i.log.gz
</fileNamePattern>
%d{yyyy-MM, aux}
:生成月份目录(如2025-03/
),不参与滚动周期计算。- 目录结构示例:
XML
./logs/
└── 2025-03/
├── app.2025-03-17.0.log.gz
└── app.2025-03-18.0.log.gz
4.2 多级目录配置
XML
<!-- 按年/月/日三级目录归档 -->
<fileNamePattern>
${LOG_DIR}/%d{yyyy, aux}/%d{MM, aux}/%d{dd, aux}/app.%d{yyyy-MM-dd}.%i.log.gz
</fileNamePattern>
5. 常见问题与排查技巧
5.1 日志日期错乱
- 现象:3 月 18 日的日志写入 3 月 17 日的文件。
- 原因 :
- 服务器时间错误或时区不一致。
- 配置中多个
%d
未正确使用aux
标记。
- 解决 :
- 使用
date
命令检查系统时间。 - 同步网络时间:
ntpdate pool.ntp.org
(Linux)。
- 使用
5.2 文件未按大小分割
- 现象 :日志超过
maxFileSize
但未生成新文件。 - 原因 :
- 滚动策略类错误(如误用
TimeBasedRollingPolicy
)。 - 文件权限不足。
- 滚动策略类错误(如误用
- 解决 :
- 确认策略类为
SizeAndTimeBasedRollingPolicy
。 - 检查日志目录读写权限:
chmod 755 ./logs
。
- 确认策略类为
6. 最佳实践与避坑指南
6.1 时间同步
- 推荐工具 :
- Linux:
chrony
或systemd-timesyncd
。 - Windows:启用 "自动设置时间"。
- Linux:
6.2 配置验证
- 快速测试 :
将maxFileSize
设为1MB
,并写入测试日志,观察是否触发滚动。
6.3 版本管理
- Logback 版本 :使用最新稳定版(如
1.4.11
),避免已知 Bug。
Maven 依赖:
XML
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.4.11</version>
</dependency>
6.4 日志监控
- 磁盘报警:设置监控告警,当日志目录大小超过阈值时触发通知。
- 日志清理 :结合
maxHistory
和totalSizeCap
避免磁盘耗尽。