Log4j2 DefaultRolloverStrategy的max属性如何真正起作用?

Cei*_*cko 26 java configuration logging rollingfileappender log4j2

RollingRandomAccessFileAppender只配置了一个OnStartupTriggeringPolicyset,但是当我将max属性设置DefaultRolloverStrategy为某个数字时,日志会无限期地生成超过该数量.

这是我的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>
Run Code Online (Sandbox Code Playgroud)

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

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

是因为我只有OnStartupTriggeringPolicy这套?

或者这里发生了什么?

我的目标是设置滚动配置,记录最近5次应用程序运行.

Rem*_*pma 27

如果指定了TimeBasedTriggeringPolicy,则DefaultRolloverStrategy将使用filePattern中指定的日期模式.要使用该max属性,请%i在filePattern中指定模式,然后添加<SizeBasedTriggeringPolicy size="20 MB" />到翻转策略.(当然还是其他一些尺寸.)

max in的值<DefaultRolloverStrategy max="5"/>将确保在相同的翻转期间(自您指定日期模式后为1秒),%d{dd-MMM-yyyy@HH.mm.ss}在触发基于大小的翻转时,将创建不超过5个文件.

如果您的翻转窗口较长,如每天滚动到新文件夹,并且在该文件夹中,请确保创建的最大大小= 20 MB的文件不超过5个,这样更有用.


更新:

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

  • 是的,我理解.我不介意只使用"logs/app-%i.log"模式,我想也许有一种方法可以挤进时间戳以方便个人观看. (6认同)