[英]How to get Log4j2 RollingFileAppender to create new log file and roll existing files
如何配置 log4j2(当前使用 V2.13.3)以在每次应用启动时创建一个新的日志文件,并滚动任何现有文件,最多 10 个文件?
例如,应用程序第一次运行它会创建test.log
。 它第二次运行现有的test.log
被重命名,并且应用程序开始记录到新的test.log
。 等等。
我尝试了以下配置:
<Configuration>
<Appenders>
<RollingFile
name="file"
fileName="test.log"
filePattern="test-%d{yyyyMMdd-HHmmss}-%i.log"
append="false">
<PatternLayout pattern="%d{yyyy-MM-dd'T'HH:mm:ss.SSS} [%c{2}] [%t]%n[%p] : %m%n"/>
<OnStartupTriggeringPolicy minSize="1"/>
<DefaultRolloverStrategy max="10"/>
</RollingFile>
</Appenders>
<Loggers>
<Root level="INFO">
<AppenderRef ref="file"/>
</Root>
</Loggers>
</Configuration>
然而,滚动的日志文件永远不会被创建——log4j2 只是每次都覆盖test.log
。 我的猜测是 log4j2 在调用 OnStartupTriggeringPolicy 之前创建新的日志文件,因此策略确定不需要滚动日志文件。 AFAICS 这似乎是一个错误。
如果我将append="false"
标志更改为append="true"
,则会创建滚动文件,但是第一次运行应用程序时它会同时创建test.log
和test-yyyymmdd-hhmmss-1.log
文件(后者是空的),并且对于每次后续运行,它都会使用原始test-yyyymmdd-hhmmss-n.log
文件名创建一个滚动文件,例如:
test-20200715-120227-1.log
test-20200715-120227-2.log
test-20200715-120227-3.log
(我希望每个滚动文件都有不同的 hhmmss 时间)。
奇怪的是,如果(保持append="true"
)我在滚动日志文件名中添加了一个.gz
后缀,则:
filePattern="test-%d{yyyyMMdd-HHmmss}-%i.log.gz"
比我得到想要的行为:
test-20200715-143142-1.log.gz
test-20200715-143149-1.log.gz
test-20200715-143153-1.log.gz
OnStartupTriggerPolicy 应该在 Policies 标签下 go
<Policies> <OnStartupTriggeringPolicy minSize="1"/> </Policies>
我会尝试这样的事情:
<Configuration>
<Appenders>
<RollingFile
name="file"
fileName="test.log"
filePattern="test-%d{yyyyMMdd-HHmmss}-%i.log"
append="false"
bufferedIO="false"
>
<PatternLayout>
<Pattern>%d{yyyy-MM-dd'T'HH:mm:ss.SSS} [%c{2}] [%t]%n[%p] : %m%n
</Pattern>
</PatternLayout>
<Policies>
<OnStartupTriggeringPolicy minSize="1"/>
</Policies>
<DefaultRolloverStrategy max="10"/>
</RollingFile>
</Appenders>
<Loggers>
<Root level="INFO">
<AppenderRef ref="file"/>
</Root>
</Loggers>
</Configuration>
您的文件名模式中有时间模式,但没有基于时间的翻转策略。 您还有 %i 没有基于大小的翻转策略。 如果没有任何其他策略,onstartup 策略不知道该怎么做,这可能是一个错误,因为它希望存在其他一些策略。 我必须检查一下。
此外,在 DefaultRolloverStrategy 上指定 max=10 不太可能完成任何事情。 该设置意味着“在翻转策略的‘窗口’内只保留 10 个文件”。 如果您有一个基于时间的 24 小时翻转和一个基于大小的翻转导致每天 20 次翻转,那么只有其中的 10 个会被保留。 但是在第 2 天你将有 20 个,在第 3 天你将有 30 个,等等。
我会建议这样的事情:
<Appenders>
<RollingFile
name="file"
fileName="test.log"
filePattern="test-%i.log"
append="false"
bufferedIO="false"
>
<PatternLayout>
<Pattern>%d{yyyy-MM-dd'T'HH:mm:ss.SSS} [%c{2}] [%t]%n[%p] : %m%n
</Pattern>
</PatternLayout>
<Policies>
<OnStartupTriggeringPolicy minSize="1"/>
<SizeBasedTriggeringPolicy size=50MB"/>
</Policies>
<DefaultRolloverStrategy max="10"/>
</RollingFile>
</Appenders>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.