Log4j2基于日期的滚动,但基于大小限制覆盖

时间:2018-02-13 08:34:36

标签: java log4j2

我试图配置一个RollingFile appender,它在每个月(18个月)之后执行翻转。但是,我希望log4j2覆盖当前日志,如果它达到25 MB。例如,如果我们目前在二月,那么我将有一月份的先前日志。但是,如果我当前的2月日志将达到25 MB,则我的2月日志将被2月的新日志覆盖。这是我目前的appender配置:

<RollingFile name="audit-log" fileName="${sys:user.dir}/${baseDir}/${projectName}-Audit.log" immediateFlush="true" filePattern="${sys:user.dir}/${baseDir}/${projectName}-Audit.%d{yyyy-MM}.log">
    <PatternLayout pattern="%d %-5level: %msg%n"/>
    <Policies>
        <TimeBasedTriggeringPolicy />
        <SizeBasedTriggeringPolicy size="25 MB"/>
    </Policies>
    <DefaultRolloverStrategy max="18"/>
</RollingFile>

然而,无论我是否已切换月份或达到25 MB大小限制,这都会延续。如何在切换月份之后才能使日志滚动,但是在达到大小限制后是否会覆盖当前日志?

谢谢!

1 个答案:

答案 0 :(得分:0)

我能够使用以下配置解决这个问题:

<RollingFile name="audit-log" fileName="${sys:user.dir}/${baseDir}/${projectName}-Audit.log" immediateFlush="true" filePattern="${sys:user.dir}/${baseDir}/${projectName}-Audit.%d{yyyy-MM}.log">
    <PatternLayout pattern="%d %-5level: %msg%n"/>
    <Policies>
        <TimeBasedTriggeringPolicy />
        <SizeBasedTriggeringPolicy size="25 MB"/>
    </Policies>
    <DefaultRolloverStrategy max="1">
        <Delete basePath="${baseDir}">
            <IfAccumulatedFileCount exceeds="18" />
        </Delete>
    </DefaultRolloverStrategy>
</RollingFile>