如何配置Logback将7天以上日志归档为.gz后删除原日志?
实现日志压缩归档与长期存储方案
完全可以实现你的需求,通过Logback配置自动压缩归档日志,再结合定时脚本将超期日志迁移到长期存储目录,具体步骤如下:
1. 修改Logback配置,启用自动压缩
调整你的TimeBasedRollingPolicy配置,在fileNamePattern末尾添加.gz后缀,Logback会自动在日志滚动归档时将文件压缩为GZIP格式:
<appender name="FILE-ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender"> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <pattern>%highlight([%level]) - [%date] - [%logger] %msg%n</pattern> </encoder> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 每日滚动归档,自动压缩为gz格式 --> <fileNamePattern>${DEV_HOME}/archived/app-error.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>100MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <!-- 原目录保留7天的压缩日志 --> <maxHistory>7</maxHistory> <!-- 启动时自动清理超期日志(可选) --> <cleanHistoryOnStart>true</cleanHistoryOnStart> </rollingPolicy> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>ERROR</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender>
2. 编写定时迁移脚本
由于Logback本身不支持将超期日志自动迁移到其他目录,需要编写Shell脚本配合Cron定时执行,将超过7天的压缩日志移动到长期存储文件夹:
创建脚本archive-old-logs.sh:
#!/bin/bash # 替换为你的实际路径 ARCHIVE_DIR="${DEV_HOME}/archived" LONG_TERM_ARCHIVE_DIR="${DEV_HOME}/long-term-archived" # 确保长期存储目录存在 mkdir -p "${LONG_TERM_ARCHIVE_DIR}" # 移动超过7天的压缩日志到长期目录 find "${ARCHIVE_DIR}" -name "app-error.*.log.gz" -mtime +7 -exec mv {} "${LONG_TERM_ARCHIVE_DIR}/" \; # 可选:清理长期目录中超过1年的日志(按需调整天数) # find "${LONG_TERM_ARCHIVE_DIR}" -name "app-error.*.log.gz" -mtime +365 -exec rm {} \;
3. 配置定时任务
给脚本添加执行权限,并配置Cron每日凌晨执行(避开日志滚动高峰):
chmod +x archive-old-logs.sh crontab -e
在Cron中添加以下内容(每天凌晨1点执行迁移):
0 1 * * * /path/to/archive-old-logs.sh
说明
- Logback会在每日日志滚动时自动完成压缩,无需额外配置压缩逻辑;
- 脚本执行时间建议早于Logback可能的清理时间(比如凌晨1点,而日志滚动通常在午夜),避免Logback提前删除超期日志;
- 长期存储目录的日志可按需保留更久,后续排查问题时直接解压.gz文件即可查看原始日志内容。
内容的提问来源于stack exchange,提问作者Alim Uddin
相关产品推荐
相关产品推荐

