27

我正在尝试每小时创建新的日志文件。我在 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>

在间隔属性中,我设置了 1 表示 1 小时。但我的文件仍然不是每 1 小时滚动一次。

请帮我找出任何错误。

注意:我已经包含了 log4j2 的 beta9(这是最新的)

4

6 回答 6

31

这里的 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天,然后查看结果。

假设 10 月 29 日的最后一个日志文件 (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 文件夹中。如果我们将 log4j2.xml 保存在类路径中,则不会加载它。

于 2013-10-30T10:22:59.550 回答
9

Log4j文档

间隔 -> (整数)基于日期模式中最具体的时间单位应该多久发生一次翻转。例如,对于以小时为最具体的项目并且以 4 次翻转为增量的日期模式,每 4 小时将发生一次。默认值为 1。

如果您想每小时创建一次,您应该更改文件名模式。

于 2018-05-22T10:18:16.913 回答
6

正如 Abid 所提到的,区间值是在指定为 filePattern 的一部分的模式的上下文中解释的。它从最低面额开始。例如,如果模式包含 S,则频率将以毫秒为单位。它支持作为 SimpleDateFormat java doc http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html的一部分详细描述的日期模式

于 2014-10-01T20:24:11.967 回答
4

你有一个非空的日志文件(否则没有什么可以翻转)?

请注意,即使名称是“TimeBased...”,它实际上也不会在指定时间翻转,而是在超过时间阈值后到达的第一个日志事件时翻转。您可以尝试使用一个在 61 分钟左右后记录某些内容的小型测试程序,看看问题是否仍然存在?

如果上面的测试程序没有翻转,你可能发现了一个错误。在这种情况下,请在 log4j 问题跟踪器上提出它。(一定要附上团队可以用来重现问题的测试程序)。

于 2013-10-10T22:56:19.467 回答
2

时间间隔解释取决于您使用的文件模式。以下配置为我每秒滚动文件。

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
    <Appenders>
            <Console name="A" target="SYSTEM_OUT">
                    <PatternLayout pattern="%d [%t] %-5p {%F:%L} %x - %m%n" />
                    <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
            </Console>

            <RollingFile name="R"
                    fileName="/home/xxx/yyy/myapp.log" filePattern="/home/xxx/yyy/myapp-%d{yyyy-MM-dd-HH-mm-ss}-%i.log">
                    <PatternLayout pattern="%d [%t] %-5p {%F:%L} %x - %m%n" />
                    <Policies>
                            <TimeBasedTriggeringPolicy interval="1" />
                    </Policies>
            </RollingFile>
    </Appenders>


    <Loggers>
            <Root level="INFO">
                    <AppenderRef ref="A" />
                    <AppenderRef ref="R" />
            </Root>
    </Loggers>
</Configuration>
于 2021-06-07T07:39:00.580 回答
0

根据您的 TimeBasedTriggeringPolicy 配置,记录器只会每天而不是每小时填充日志。AFAIK,您可以通过将 filePattern 从 HH(小时)更改为 dd(天)来实现该功能。

我已经修改了你的 config.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}-%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>

有关更多详细信息,请查看

希望这也能锻炼你。

于 2019-02-14T05:15:54.087 回答