log4j2 默认翻转策略不删除日志

Cha*_*ase 2 log4j2

我的 log4j2 具有这样设置的默认翻转策略 -

<RollingFile name="RollingFile" fileName="cc" filePattern="logs/${baseFileName}-%d{yyyy-MM-dd}.log.gz">
        <PatternLayout>
            <pattern>%d{dd/MMM/yyyy HH:mm:ss,SSS}- %c{1}: %m%n</pattern>
        </PatternLayout>
        <Policies>
            <TimeBasedTriggeringPolicy interval="1" modulate="true" />
        </Policies>
        <DefaultRolloverStrategy>
            <Delete basePath="logs/">
                <IfFileName glob="logs/${baseFileName}-*.log" />
                <IfLastModified age="2d" />
            </Delete>
        </DefaultRolloverStrategy>
    </RollingFile>
Run Code Online (Sandbox Code Playgroud)

所以当它超过 2 天时应该删除最旧的文件吗?

我的日志文件存储在项目的基本路径中名为 logs..的文件夹中。

但是我只是做了一个测试运行,它在我停止之前得到了 5 个文件......

知道是什么原因造成的吗?

Imr*_*mad 5

请检查以下删除旧文件的配置: DefaultRolloverStrategy max="10" 表示每天最多可以创建 10 个文件。您可以使用 IfAccumulatedFileCount 超过="2" 来控制始终存在的文件数量。将指定文件的年龄,如果文件总数大于 2(如 IfAccumulatedFileCount 中指定),则从当天起超过 2 天的文件将被删除。

<DefaultRolloverStrategy max="100">
<Delete basePath="${baseDir}" maxDepth="2">
  <IfFileName glob="*/app-*.log">
    <IfLastModified age="2d">
      <IfAny>
        <IfAccumulatedFileCount exceeds="2" />
      </IfAny>
    </IfLastModified>
  </IfFileName>
</Delete>
Run Code Online (Sandbox Code Playgroud)

也许是在错误的路径中搜索要删除的文件,或者您的日志文件不是 2 天前的。您使用的是哪个版本的 log4j?它适用于 Log4j-2.5 及更高版本