DefaultRolloverStrategy不会删除任何文件

时间:2018-03-13 14:33:06

标签: log4j2

我使用以下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>

1 个答案:

答案 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 >