如何在Logback中保留7天日志归档并每日生成独立压缩包?
解决Logback每日归档并保留7天日志的问题
没问题,完全可以实现你的需求!我分两种常见场景给你讲具体配置方案,你可以根据实际需要选择:
场景1:保留最近7天的日期命名归档
如果你的需求是始终保留最近7天的日志归档,每天生成一个带日期的zip文件,第8天自动删除最早的那一份归档(始终保持7个文件),那调整RollingAppender的配置即可:
<appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 当日日志的存储路径和文件名 --> <file>logs/current.log</file> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 归档文件命名规则:按日期生成zip,例如2024-05-20.zip --> <fileNamePattern>logs/archive/%d{yyyy-MM-dd}.zip</fileNamePattern> <!-- 保留最近7天的归档文件 --> <maxHistory>7</maxHistory> <!-- 可选:如果不需要按总日志大小限制归档,可注释此行 --> <!-- <totalSizeCap>10GB</totalSizeCap> --> <!-- 确保无论当日日志大小,到点都会触发归档 --> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <!-- 设置极小阈值,保证哪怕日志为空也会生成归档 --> <maxFileSize>1B</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> </rollingPolicy> </appender>
关键细节:
maxHistory=7是核心参数,告诉Logback只保留最近7天的归档,超过的自动清理,正好匹配你“保留全部7天日志”的要求。- 搭配
SizeAndTimeBasedFNATP和maxFileSize=1B,能确保不管当日日志量多少(哪怕是空日志),午夜都会触发归档操作,生成当天的zip文件。
场景2:固定7个序号命名归档(1.zip到7.zip循环覆盖)
如果你希望归档文件是固定的1.zip到7.zip(对应周一到周日),每周循环覆盖旧文件,那可以利用Logback的%u占位符(代表星期几,1=周一,7=周日)配置:
<appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>logs/current.log</file> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 用%u作为归档文件名,生成1.zip到7.zip --> <fileNamePattern>logs/archive/%u.zip</fileNamePattern> <!-- 这里maxHistory设大一些,靠%u自动循环覆盖,避免文件堆积 --> <maxHistory>365</maxHistory> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>1B</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> </rollingPolicy> </appender>
这样配置后,每个星期几的日志都会归档到对应序号的zip文件,比如周一的日志始终存在1.zip,下周一的归档会自动覆盖旧的1.zip,始终保持7个归档文件,完全符合你提到的命名需求。
额外注意
- 建议使用Logback 1.2.x及以上版本,旧版本对部分参数的支持可能不完善。
- 归档目录(比如
logs/archive)无需手动创建,Logback会自动生成对应的父目录。
内容的提问来源于stack exchange,提问作者BHAWIN
相关产品推荐
相关产品推荐

