1

Log4J Extrasで提供されている TimeBasedRollingPolicy によって促進される自動ログ ローリングと圧縮を使用しています(以下の構成を参照)。

このロギングを行っているアプリケーションが常に停止/開始するのは正常なことであり、ロールオーバー トリガー イベント (この場合は 1 時間ごとのロールオーバー) 中にアプリケーションが停止すると、自動圧縮が行われないことに気付きました。ローリング自体(圧縮なし)がまだ発生しており、正常に機能しているように見えるため、これは奇妙だと思います。

継続的に実行されないアプリケーションに対してログ圧縮を機能させることはできませんか?

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

ロールオーバー プロセスは、アプリの実行中に異なる時間単位 (例では時間) の 2 つのメッセージをログに記録することによってのみトリガーされます。過去の時間単位は、アプリの起動時にスキャンされません。

できることの1 つは、別の「アクティブな」ファイル名を使用して、すべてのログ メッセージがロール/圧縮される前に保存される場所にすることです。これを行うと、既存のアクティブなログ ファイルは、さらに 1 時間が経過するまで追加され、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 に答える