You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Log4J 2.17.2配置IfFileName与properties无法删除旧日志文件问题

Log4J 2.17.2 滚动日志旧文件无法删除的解决方法

问题描述

应用使用Log4J 2.17.2版本,通过properties文件配置滚动日志,但旧日志文件始终无法自动删除。当前目录下的日志文件列表:

-rw-rw-r--. 1 xxx xxx 1209 Feb  8 00:00 solr-20230207.log.zip
-rw-rw-r--. 1 xxx xxx 1184 Feb  9 00:00 solr-20230208.log.zip
-rw-rw-r--. 1 xxx xxx 18118 Feb 10 00:00 solr-20230209.log.zip
-rw-rw-r--. 1 xxx xxx 2438 Feb 11 00:01 solr-20230210.log.zip
-rw-rw-r--. 1 xxx xxx 1184 Feb 12 00:01 solr-20230211.log.zip
-rw-rw-r--. 1 xxx xxx 1192 Feb 13 00:01 solr-20230212.log.zip
-rw-rw-r--. 1 xxx xxx 1184 Feb 14 00:01 solr-20230213.log.zip
-rw-rw-r--. 1 xxx xxx 14000 Feb 14 09:16 solr.log

当前使用的配置文件内容:

appender.solrAppender.type = RollingFile
appender.solrAppender.name = SOLRFile
appender.solrAppender.fileName = ${...}/solr/solr.log
appender.solrAppender.filePattern = ${...}/solr/solr-%d{yyyyMMdd}.log.zip

appender.solrAppender.layout.type = PatternLayout
appender.solrAppender.layout.pattern = %d %p %C{1.} [%t] %m%n

appender.solrAppender.policies.type = Policies
appender.solrAppender.policies.trigger.type=TimeBasedTriggeringPolicy

appender.solrAppender.strategy.type = DefaultRolloverStrategy

appender.solrAppender.strategy.deleteAction.type=Delete
appender.solrAppender.strategy.deleteAction.basePath=${...}/solr/
appender.solrAppender.strategy.deleteAction.maxDepth=2
appender.solrAppender.strategy.deleteAction.testMode=false
appender.solrAppender.strategy.deleteAction.followLinks=false
appender.solrAppender.strategy.deleteAction.fileName.type=IfFileName
appender.solrAppender.strategy.deleteAction.fileName.glob=*/solr-*.log.zip
appender.solrAppender.strategy.deleteAction.fileCount.type=IfAccumulatedFileCount
appender.solrAppender.strategy.deleteAction.fileCount.age=2

问题分析

  1. Glob匹配规则错误:配置里的glob=*/solr-*.log.zip会匹配solr目录下子文件夹中的文件,但实际日志都直接存在solr根目录,这个规则无法命中目标文件。
  2. 删除条件参数错误:IfAccumulatedFileCount的有效配置参数是count(保留文件数量),而非age,原配置里的age=2属于无效设置,导致删除逻辑不生效。

修正后的配置

appender.solrAppender.type = RollingFile
appender.solrAppender.name = SOLRFile
appender.solrAppender.fileName = ${...}/solr/solr.log
appender.solrAppender.filePattern = ${...}/solr/solr-%d{yyyyMMdd}.log.zip

appender.solrAppender.layout.type = PatternLayout
appender.solrAppender.layout.pattern = %d %p %C{1.} [%t] %m%n

appender.solrAppender.policies.type = Policies
appender.solrAppender.policies.trigger.type=TimeBasedTriggeringPolicy
# 显式设置每天滚动一次,默认值为1,可省略
appender.solrAppender.policies.trigger.interval=1

appender.solrAppender.strategy.type = DefaultRolloverStrategy

appender.solrAppender.strategy.deleteAction.type=Delete
appender.solrAppender.strategy.deleteAction.basePath=${...}/solr/
appender.solrAppender.strategy.deleteAction.maxDepth=1 # 无需遍历子目录,设为1即可
appender.solrAppender.strategy.deleteAction.testMode=false
appender.solrAppender.strategy.deleteAction.followLinks=false
# 匹配solr根目录下的压缩日志文件
appender.solrAppender.strategy.deleteAction.fileName.type=IfFileName
appender.solrAppender.strategy.deleteAction.fileName.glob=solr-*.log.zip
# 设置保留最近2个日志文件,超出则自动删除
appender.solrAppender.strategy.deleteAction.fileCount.type=IfAccumulatedFileCount
appender.solrAppender.strategy.deleteAction.fileCount.count=2

可选扩展配置

如果需要按时间维度删除(比如删除3天前的日志),可以替换IfAccumulatedFileCount为IfLastModified,配置如下:

appender.solrAppender.strategy.deleteAction.age.type=IfLastModified
appender.solrAppender.strategy.deleteAction.age.age=3d

建议先开启testMode=true,查看日志输出中标记的待删除文件,确认规则正确后再关闭测试模式,避免误删。

内容的提问来源于stack exchange,提问作者Master

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 17:15:33