我试图每小时创建新的日志文件.我在RollingFileAppender中使用lo4j2的TimeBasedTriggerringPolicy.下面是我从log4j2官方网站上获取的示例xml配置代码.
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn" name="MyApp" packages="">
<Appenders>
<RollingFile name="RollingFile" fileName="logs/app.log" filePattern="logs/$${date:yyyy-MM}/app-%d{yyyy-MM-dd-HH}-%i.log.gz">
<PatternLayout>
<Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
</PatternLayout>
<Policies>
**
<TimeBasedTriggeringPolicy interval="1" modulate="true" />
**
<SizeBasedTriggeringPolicy size="250 MB" />
</Policies>
</RollingFile>
</Appenders>
<Loggers>
<Root level="error">
<AppenderRef ref="RollingFile" />
</Root>
</Loggers>
</Configuration>
在interval属性中,我设置了1表示1小时.
但我的文件仍然不会每1小时滚动一次.
请帮我发现任何错误.
注意:我已经包含了log4j2的beta9(这是最新的)
解决方法:
1表示1天而不是1小时.我用以下配置手动测试了.
<RollingFile name="T" fileName="/data_test/log/abc.log"
filePattern="/data_test/log/abc-%d{MM-dd-yyyy}-%i.log">
<PatternLayout>
<Pattern>%d{ISO8601} %-5p [%t] (%F:%L) - %m%n</Pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
<SizeBasedTriggeringPolicy size="100 KB" />
</Policies>
</RollingFile>
对于手动测试,我更改了系统日期和时间.
首先,尝试增加1小时.将生成日志文件,但不会按预期生成.
然后更改系统日期,增加1天,然后查看结果.
假设第29天至10月的最后一个日志文件(abc.log)为50 KB.配置大小为100 KB.如果我们改变一天(增加1天)然后运行.
然后,最后一个文件将被重命名为29-Oct-(某个序列号).log(复制时为50 KB文件),并将使用abc.log创建新文件
我在web.xml中使用以下配置的简单servlet尝试了这个
<context-param>
<param-name>log4jConfiguration</param-name>
<param-value>log4j2.xml</param-value>
</context-param>
将log4j2.xml保存在src文件夹中.如果我们将它保存在classpath中,则不会加载log4j2.xml.