我配置了仅包含
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 个应用程序的运行。
如果指定了
DefaultRolloverStrategy
,则 filePattern
将使用 TimeBasedTriggeringPolicy
中指定的日期模式。要使用 max
属性,请在 %i
中指定 filePattern
模式,并将 <SizeBasedTriggeringPolicy size="20 MB" />
添加到翻转策略中。 (当然也可以是其他尺寸。)
max
中的<DefaultRolloverStrategy max="5"/>
值将确保在相同的翻转周期内(自您指定日期模式%d{[email protected]}
起一秒),基于大小的翻转时不会创建超过5个文件被触发了。
如果您的滚动窗口较长,例如每天滚动到一个新文件夹,并且在该文件夹中,确保创建的文件最大大小不超过 5 个,则此功能更有用 = 20 MB。
更新:
Log4j 2.5 添加了配置自定义删除操作的功能。开箱即用,您可以根据时间、数量或占用的磁盘空间(累积文件大小)删除文件。