log4j配置,包含每日滚动,gzip和最大备份文件

时间:2013-10-27 09:41:32

标签: java logging log4j rollingfileappender

我的要求是获取压缩的每日滚动日志文件,仅保留最后K天。

我知道我可以使用apache-log4j-extras通过压缩获得每日滚动文件 使用此配置:

<appender name="debugFileRolling" class="org.apache.log4j.rolling.RollingFileAppender">
    <!-- The active file to log to -->
    <param name="file" value="debug.log" />
    <param name="append" value="true" />
    <param name="encoding" value="UTF-8" />
    <rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
        <param name="FileNamePattern" value="/%d{yyyy-MM-dd}-debug.log.gz" />
    </rollingPolicy>

    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%-5p %d [%t] %c: %m%n" />
    </layout>
</appender>

我可以使用MaxBackupIndex获取滚动文件。但我想把两者结合起来。

所以我的问题是:

是否有一个我可以使用的appender会让我三个:每日滚动,压缩和最大文件。 我知道我可以实现自己的FileAppenderTriggeringPolicyRollingPolicy,但我想避免这种情况。

1 个答案:

答案 0 :(得分:4)

log4j 1.2没有支持您需要的所有功能的appender。 您必须使用自己的实现。

log4j2似乎支持您的要求。请查看log4j2文档(http://logging.apache.org/log4j/2.x/manual/appenders.html#RollingFileAppender):

<?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{MM-dd-yyyy}-%i.log.gz">
      <PatternLayout>
        <Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
      </PatternLayout>
      <Policies>
        <TimeBasedTriggeringPolicy />
        <SizeBasedTriggeringPolicy size="250 MB"/>
      </Policies>
      <DefaultRolloverStrategy max="20"/>
    </RollingFile>
  </Appenders>
  <Loggers>
    <Root level="error">
      <AppenderRef ref="RollingFile"/>
    </Root>
  </Loggers>
</Configuration>