LogBj 2中的RollingFile的TimeBased和SizeBased策略

时间:2017-02-14 10:42:17

标签: java log4j2 rollingfileappender

我的要求(为测试目的而定制的值):

  1. 日志文件的最大大小应为1KB,超过该日志文件应生成新的日志文件,同时保持上一个文件不变。我并不关心这个生成的最大文件数。它没有上限。
  2. 每分钟,前一分钟的日志文件应转换为.zip。 因此,如果时间是14:00:01,假设由于1 KB限制而为此生成了100个日志文件。现在在14:00:02,前一秒的100个日志文件应该转换为100个.zip文件,到14:00:02结束时,我应该有另外100个日志文件。
  3. 因此,在14:00:03开始时,我应该有14:00:02的100个.log文件和14:00:01的100个.zip文件。

    我尝试了param值和策略的各种组合,但未能实现这一点。当我使用这两个策略时,我会在超过1KB限制时获得.zip文件。以下是我的配置。请告诉我出错的地方:

    <RollingFile name="RollingFile" fileName="logs/utility.log" filePattern="logs/utility-%d{yyyy-MM-dd-HH-mm}-%i.zip" >
      <PatternLayout>
        <pattern>%d{dd/MMM/yyyy HH:mm:ss,SSS}- %c{1}: %m%n</pattern>
      </PatternLayout>
      <Policies>
       <TimeBasedTriggeringPolicy/>
    <SizeBasedTriggeringPolicy size="1 KB" />
    </Policies>
    </RollingFile>
    

    如果我将其修改为以下,我没有收到任何zip文件:

    <RollingFile name="RollingFile" fileName="logs/utility.log" filePattern="logs/utility-%d{yyyy-MM-dd-HH-mm}-%i.log" >
      <PatternLayout>
        <pattern>%d{dd/MMM/yyyy HH:mm:ss,SSS}- %c{1}: %m%n</pattern>
      </PatternLayout>
      <Policies>
       <TimeBasedTriggeringPolicy>
        <param name="FileNamePattern" value="logs/utility-%d{yyyy-MM-dd-HH-mm}-%i.zip" />
       </TimeBasedTriggeringPolicy> 
    <SizeBasedTriggeringPolicy size="1 KB" />
    </Policies>
    </RollingFile>
    

1 个答案:

答案 0 :(得分:0)

触发策略只是 - appender应该用来确定何时应该发生文件翻转的方法。如果文件模式以“正常”压缩文件扩展名结束,则每次翻转都会自动进行压缩。要更改该行为,您必须创建自定义操作以查找在前一分钟内创建的所有文件并压缩它们。

操作指定为

<RollingFile ...>
  <DefaultRolloverStrategy>`
    <Delete basePath="${baseDir}" maxDepth="2">
      <IfFileName glob="*/app-*.log.gz" />
      <IfLastModified age="60d" />
    </Delete>
  </DefaultRolloverStrategy>
</RollingFile>