应用重启后没有log4j自动压缩

时间:2010-12-20 00:23:49

标签: log4j compression gzip rollingfileappender

我正在使用Log4J Extras中提供的TimeBasedRollingPolicy促进的自动日志滚动和压缩(参见下面的配置)。

正在执行此日志记录的应用程序持续停止/启动是正常的,并且我注意到如果应用程序在翻转触发事件期间停止(在这种情况下每小时翻转),则不会发生自动压缩。我发现这很奇怪,因为滚动本身(没有压缩)仍然会发生并且似乎工作正常。

对于不能连续运行的应用程序,是否无法进行日志压缩?

有谁知道如何使用Log4J?

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration debug="true">

  <appender name="ROLL" class="org.apache.log4j.rolling.RollingFileAppender">
    <rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
      <param name="FileNamePattern" value="/var/batchproc/logs/log4j_roll_compress_%d{yyyy-MM-dd-kk}.log.gz"/>
    </rollingPolicy>

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

  <root>
    <appender-ref ref="ROLL"/>
  </root>

</log4j:configuration>

1 个答案:

答案 0 :(得分:2)

只有在应用程序运行时记录两个不同时间单位(示例中为小时)的消息,才会触发翻转过程。在应用启动时不扫描过去的时间单位。

可以做的一件事是使用单独的“活动”文件名来表示所有日志消息在滚动/压缩之前的所有消息。如果您这样做,任何现有的活动日志文件将被追加到另一个小时,然后然后滚动到一个gzipped,带时间戳的文件。不幸的是,这个文件的时间戳在启动时没有被检查(至少在apache-log4j-extras 1.1中),因此旧时的日志和新的小时日志将在滚动文件中一起显示。但至少它会被压缩!

<appender name="ROLL" class="org.apache.log4j.rolling.RollingFileAppender">
    <param name="File" value="/var/batchproc/logs/log4j_roll_active.log"/>

    ...rest of example config here...
</appender>