我正在尝试每小时创建一个新的日志文件。我在RollingFileAppender中使用了lo4j2的TimeBasedTriggeringPolicy。下面是我从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(这是最新的)
7条答案
按热度按时间tmb3ates1#
这里的1表示1天而不是1小时。我已经用下面的配置手动测试过了。
对于手动测试,我更改了系统日期和时间。首先,尝试增加1小时。将生成日志文件,但不符合预期。然后更改系统日期,增加1天,然后查看结果。
假设10月29日的最后一个日志文件(abc.log)为50 KB。配置大小为100 KB。如果我们更改日期(增加1天),然后运行。那么,最后一个文件将重命名为29-Oct-(某个序列号).log(复制时为50 KB文件),并且将使用abc.log创建新文件
我已经在web.xml中用下面的配置对简单的servlet进行了尝试
将log4j2.xml保存在src文件夹中。如果将log4j2.xml保存在类路径中,则不会加载它。
t2a7ltrp2#
日志4j documentations:
interval -〉(integer)根据日期模式中最特定的时间单位进行变换的频率。例如,在日期模式中,最特定的项是小时,并且增量为4,则每4小时进行一次变换。默认值为1。
如果您希望每小时创建一次文件名,则应更改文件名模式。
hgb9j2n63#
如Abid所述,interval值在指定为filePattern的一部分的模式上下文中解释。它以最小单位开始。例如,如果模式包含S,则频率将以毫秒为单位。它支持SimpleDateFormat java doc http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html中详细描述的日期模式
jv2fixgn4#
您是否有非空的日志文件(否则没有可滚动的内容)?
请注意,即使名称是“TimeBased...”,它实际上也不会在指定的时间滚动,而是在超过时间阈值后到达的第一个日志事件时滚动。您是否可以尝试使用一个小的测试程序,在大约61分钟后记录一些内容,看看问题是否仍然发生?
如果上面的测试程序没有更新,你可能发现了一个bug。在这种情况下,请在log4j问题跟踪器上提出它。(一定要附上测试程序,团队可以使用它来重现问题)。
unftdfkk5#
时间间隔的解释取决于您使用的文件模式。以下配置每秒为我滚动一次文件。
vm0i2vca6#
每天滚动
每天滚动小时数
每天5天滚动
每天5小时滚动
每月滚动
希望这些案例能很好地帮助我们理解filePattern和interval是如何关联的。
g9icjywg7#
根据您的TimeBasedTriggeringPolicy配置,logger将只填充每天的日志,而不是每小时。AFAIK,您可以通过将filePattern从HH(小时)更改为dd(天)来实现该功能。
我已经修改了您的config.xml。请尝试以下操作
有关详细信息,请查看this
希望这对你也有好处。