1

我正在使用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>
4

1 回答 1

2

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

可以做的一件事是使用单独的“活动”文件名作为所有日志消息在滚动/压缩之前所在的位置。如果你这样做,任何现有的活动日志文件都将被追加到另一个小时过去,然后滚动到一个 gzip 压缩的带时间戳的文件中。不幸的是,这个文件的时间戳在启动时没有被检查(至少在 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>
于 2011-05-20T19:40:56.877 回答