我使用以下Log4j2配置来测试行为。它每10秒旋转一次文件,并且只能保存3个文件。但是没有文件被删除。我错过了什么?
请不要建议使用删除操作。
<RollingFile name="File" fileName="/var/log/mylog.log" filePattern="/var/log/mylog-%d{yyyy-MM-dd-HH-mm-ss}.log.gz">
<PatternLayout>
<Pattern>${LOG_PATTERN}</Pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy interval="10"/>
</Policies>
<DefaultRolloverStrategy max="3"/>
</RollingFile>
答案 0 :(得分:0)
我意识到这是一个老问题,但是我遇到了同样的问题。
我也意识到OP所说的"Please don't suggest to use the delete action"
,所以这可能意味着使用Delete
会有版本限制。
但是我发现这个feature request可以为这种行为提供一些启示-那里有注释。
DefaultRolloverStrategy max属性仅在具有%i的情况下适用 文件模式。
“ manual”(位于“默认过渡策略”下)表示
默认的过渡策略接受日期/时间模式和 来自在指定的filePattern属性中的整数 RollingFileAppender本身
和
max:integer:“计数器的最大值。一旦该值是 到达的较旧的存档将在以后的过渡中被删除。的 默认值为7。“
“ counter”和“ integer”的混合使用-但是(现在)认为这仅适用于“%i”模式。如果手册中使用了“整数计数器”,则可能会更清楚。
我使用Delete
(对不起,OP)开始工作(使用2.10.0和几天而不是秒)的解决方案是:
<RollingFile name="MyLog" fileName="${sys:dataDir}/mylog.log" append="true">
<FilePattern>./mylog-%d{yyyy-MM-dd}.log.zip</FilePattern>
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level - %msg %logger{36}%n"/>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true" />
</Policies>
<DefaultRolloverStrategy>
<Delete basePath="${sys:dataDir}" maxDepth="1">
<IfFileName glob="mylog-*.log.zip" />
<IfLastModified age="7d" />
</Delete>
</DefaultRolloverStrategy>
</RollingFile >