如何配置Spring Boot Logback滚动策略实现按天+小时日志归档
日志按天+小时归档的application.yml配置方案
要实现按日期分文件夹、每小时生成独立日志且保留7天的需求,你需要调整logback滚动策略的文件路径规则,同时修正配置里的冗余参数,以下是正确的配置:
logging: level: root: INFO file: name: "pathToLogs/myApp/logs/current/myApp.log" # 活跃日志单独存放,避免和归档日志混淆 logback: rollingpolicy: file-name-pattern: "pathToLogs/myApp/logs/%d{yyyy-MM-dd}/myApp_%d{HH}.%i.gz" max-history: 7 # 保留最近7天的日志文件夹 clean-history-on-start: true # 启动时自动清理过期日志 max-file-size: 100MB # 可选:单个小时日志超量时拆分,按需调整
关键配置说明
- file.name:把当前正在写入的活跃日志单独放在
current子目录,避免和归档后的日期分类日志混放,也可以直接放在根日志目录,但分类更清晰 - file-name-pattern:核心规则,
%d{yyyy-MM-dd}作为文件夹层级,确保每天的日志自动归类到对应日期的文件夹;%d{HH}指定按小时生成独立文件;%i是日志拆分索引,当单个小时的日志超过max-file-size时会生成多个文件(比如myApp_08.1.gz),不需要拆分的话可以去掉.%i - max-history:设置为7,logback会自动删除超过7天的日期文件夹,正好匹配你保留7个日期文件夹的需求
- clean-history-on-start:开启后应用启动时就会清理过期日志,避免日志堆积占用磁盘空间
原配置的问题修正
- 原配置的
file-name-pattern重复写了logs路径,且没有将日期作为文件夹层级,导致所有日志文件混在同一目录,无法实现按日期分类的需求 - 原配置使用了
logging.file.max-history,这个参数针对旧日志系统实现,对于logback滚动策略,应该用logging.logback.rollingpolicy.max-history,原参数可直接移除
最终效果
应用运行后,会在pathToLogs/myApp/logs下生成以yyyy-MM-dd命名的文件夹,每个文件夹内包含对应小时的日志文件(比如myApp_00.gz、myApp_01.gz...),超过7天的日期文件夹会被自动清理,最终保留最近7天的日志目录,每个目录下最多24个小时日志文件(若全天有日志输出)
内容的提问来源于stack exchange,提问作者Aleksey Bakharev
相关产品推荐
相关产品推荐

