【发布时间】:2014-08-24 11:07:05
【问题描述】:
我已经配置了一个RollingRandomAccessFileAppender 只设置了OnStartupTriggeringPolicy,但是当我将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>
是因为我的名称模式中没有迭代器吗?
是不是因为我的文件名精度设置为秒?
是因为我只有OnStartupTriggeringPolicy 集吗?
或者这里发生了什么?
我的目标是设置一个滚动配置来记录最近 5 次应用程序运行。
【问题讨论】:
-
您是否应该使用
<TimeBasedTriggeringPolicy />,因为您在名称模式中使用日期? -
@Sionnach733 添加/更改并没有太大变化,它会无限期地生成日志。如果我添加一个迭代器 %i 并将精度降低到能够生成 5 个具有相同精度的日志的程度,那么它会按预期覆盖旧日志(例如,如果精度设置为分钟并且我在 1 分钟内生成 5 个日志) ,但是一旦日期发生变化(下一分钟到来),它将允许它再生成 5 个日志。理想情况下,为了方便起见,我只想要文件名中的日期而不是功能,因为我可以省略名称中的日期并使用普通迭代器来实现我想要的。
-
我观察到相同的行为并同意@Ceiling-Gecko,DefaultRolloverStrategy 上的 max 属性显然仅适用于迭代器,并且迭代器仅在剩余文件名重复时进行迭代,因此它不会当名称不同时,我似乎不可能自动删除旧的日志文件。尽管如此,当 API 大量用于这么多人时,这个功能却不存在,这真的很奇怪......
标签: java logging configuration log4j2 rollingfileappender