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

问题描述 投票:0回答:1

我配置了仅包含

RollingRandomAccessFileAppender
集的
OnStartupTriggeringPolicy
,但是当我将
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{[email protected]}.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 个应用程序的运行。

java logging configuration log4j2 rollingfileappender
1个回答
41
投票

如果指定了

DefaultRolloverStrategy
,则
filePattern
将使用
TimeBasedTriggeringPolicy
中指定的日期模式。要使用
max
属性,请在
%i
中指定
filePattern
模式,并将
<SizeBasedTriggeringPolicy size="20 MB" />
添加到翻转策略中。 (当然也可以是其他尺寸。)

max
中的
<DefaultRolloverStrategy max="5"/>
值将确保在相同的翻转周期内(自您指定日期模式
%d{[email protected]}
起一秒),基于大小的翻转时不会创建超过5个文件被触发了。

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


更新:

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

© www.soinside.com 2019 - 2024. All rights reserved.