我已将RollingRandomAccessFileAppender
配置为只设置了OnStartupTriggeringPolicy
,但是当我将DefaultRolloverStrategy
的max属性设置为某个数字时,日志会继续生成超过该数量的值下去。
这是 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次应用程序运行。
答案 0 :(得分:25)
如果指定了TimeBasedTriggeringPolicy,则DefaultRolloverStrategy将使用filePattern中指定的日期模式。要使用max
属性,请在filePattern中指定%i
模式,并将<SizeBasedTriggeringPolicy size="20 MB" />
添加到转滚策略。 (或者其他一些大小。)
<DefaultRolloverStrategy max="5"/>
中max的值将确保在相同的翻转期间(自您指定%d{dd-MMM-yyyy@HH.mm.ss}
的日期模式后为一秒),当a时,将创建不超过5个文件触发了基于大小的翻转。
如果您的翻转窗口较长,例如每天滚动到新文件夹,并且在该文件夹中,请确保创建的最大大小= 20 MB的文件不超过5个。
更新
Log4j 2.5增加了配置custom delete actions的功能。开箱即用,您可以根据年龄,计数或占用的磁盘空间(累积文件大小)删除文件。