Log4j2 DefaultRolloverStrategy的max属性是如何工作的?

我仅使用该集配置了 a,但是当我将 的 max 属性设置为某个数字时,日志会无限期地生成超过该数量。RollingRandomAccessFileAppenderOnStartupTriggeringPolicyDefaultRolloverStrategy

这是我的log4j2.xml

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </Console>
        <RollingRandomAccessFile 
            name="RollingRAF" 
            fileName="logs/app.log"
            filePattern="logs/app-%d{dd-MMM-yyyy@HH.mm.ss}.log">
            <PatternLayout>
                <Pattern>%d %p %c{1.} %m%n</Pattern>
            </PatternLayout>
            <Policies>
                <OnStartupTriggeringPolicy />
            </Policies>
            <DefaultRolloverStrategy max="5"/>
        </RollingRandomAccessFile>
    </Appenders>
    <Loggers>
        <Logger name="myLogger" level="warn">
            <AppenderRef ref="RollingRAF"/>
        </Logger>
        <Root level="error">
            <AppenderRef ref="Console"/>
        </Root>
    </Loggers>
</Configuration>

是因为我的名字模式中没有迭代器吗?

是因为文件名精度设置为秒吗?

是因为我只有这套吗?OnStartupTriggeringPolicy

或者这是怎么回事?

我在这里的目标是设置一个滚动配置,该配置将记录最近5个应用程序运行。


答案 1

如果指定了 TimeBasedTriggeringPolicy,则 DefaultRolloverStrategy 将使用 filePattern 中指定的日期模式。要使用该属性,请在 filePattern 中指定模式,并添加到滚动更新策略中。(当然还有其他尺寸。max%i<SizeBasedTriggeringPolicy size="20 MB" />

然后,max in 的值将确保在触发基于大小的滚动更新时,在相同的滚动更新期间(自您指定日期模式以来,您只需一秒钟)内将创建不超过 5 个文件。<DefaultRolloverStrategy max="5"/>%d{dd-MMM-yyyy@HH.mm.ss}

如果滚动更新窗口较长(例如每天滚动到新文件夹),并且在该文件夹中,请确保创建的最大大小为 20 MB 的文件不超过 5 个,则此功能更有用。


更新:

Log4j 2.5 添加了配置自定义删除操作的功能。开箱即用,您可以根据期限,计数或它们占用的磁盘空间(累积文件大小)删除文件。


答案 2

推荐