2017-04-20 22 views
0

イベントのロギングにlog4j 2.5を使用しているTomcatコンテナでWARデプロイメントを実行しています。ここでは、配備のlog4j2.xml設定を変更してログファイルを24時間ごとにロールオーバーさせるようにしましたが、この新しい設定では、ファイルのロールオーバーは期待どおりに行われていません。log4j 2ローリングファイルがローリングされない

設定例:

<RollingFile name="file" 
     fileName="${sys:catalina.base}/logs/${web:contextPath}.log" 
     filePattern="${sys:catalina.base}/logs/${web:contextPath}-%d{dd-MMM-yyyy}.log" 
     append="true"> 
     <PatternLayout pattern="%d{dd-MMM-yyyy HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" > 
      <header>LOG START DATE=${date:dd-MMM-yyyy HH:mm:ss.SSS} APP=${web:contextPath} TOMCAT=${env:HOSTNAME}:${env:CONNECTOR_PORT}${sys:line.separator}</header> 
      <footer>LOG END DATE=${date:dd-MMM-yyyy HH:mm:ss.SSS} APP=${web:contextPath} TOMCAT=${env:HOSTNAME}:${env:CONNECTOR_PORT}${sys:line.separator}</footer> 
     </PatternLayout> 
     <Policies> 
      <TimeBasedTriggeringPolicy/> 
     </Policies> 
    </RollingFile> 

任意のアイデアロールオーバーが行われていない理由?

注:同じ構成が、<CronTriggeringPolicy schedule="0 0 0 * * ?" />代わりのTimeBasedTriggeringPolicy、この場合には、ロールオーバーを行いますが、とは、ロールオーバーのファイルは、ファイル名とNOT昨日の日付で今日の日付で作成されます。

注2:ロールオーバーを24時間ごとに行う同様の構成の他の展開がありますが、これらの構成では、${web:contextPath}ではなくファイル名がハードコードされています。このルックアップはRollingFileが機能しない理由と関係がありますか?

--- EDIT ---

UPDATE:私たちは、Tomcatインスタンスは、Linux上で実行されている場合のTomcatインスタンスは、Windows上で実行されているが、されていない場合に設定の上使用してロールオーバー・ファイルにTimeBasedTriggeringPolicyを取得することができます。

答えて

0

タイムベースローリングの望ましい動作を得るために、設定スニペットに問題はありません。 テストするには、dd-MMM-yyyydd-MMM-yyyy-HH-mmに変更し、ログファイルが毎分転がります。

これは、あなたが目的の動作を達成できないようなものでなければなりません。

マイセットアップ#1:

  • Log4j2のv2.8.2
  • のApache Tomcat 8.5.13
  • のWindows 7のEnterprise SP1

マイセットアップ#2:

  • Log4j2 v2.5
  • のApache Tomcat 7.0.77
  • のCentOS 7(1611)

私は、WEB-INF/libに以下の3つのJARファイルがあります。

  • のlog4j-API-2.5.jar
  • のlog4jを-core-2.5.jar
  • のlog4j-ウェブ-2.5.jar
  • ここ

あなたの参照のための私の完全なlog4j2.xmlです:

<?xml version="1.0" encoding="UTF-8"?> 
<Configuration status="DEBUG"> 
    <Appenders> 
     <RollingFile name="RollingFileAppender" 
      fileName="${sys:catalina.base}/logs/${web:contextPath}.log" 
      filePattern="${sys:catalina.base}/logs/${web:contextPath}-%d{dd-MMM-yyyy-HH-mm}.log" 
      append="true"> 
      <PatternLayout pattern="%d{dd-MMM-yyyy HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" > 
       <header>LOG START DATE=${date:dd-MMM-yyyy HH:mm:ss.SSS} APP=${web:contextPath} TOMCAT=${env:HOSTNAME}:${env:CONNECTOR_PORT}${sys:line.separator}</header> 
       <footer>LOG END DATE=${date:dd-MMM-yyyy HH:mm:ss.SSS} APP=${web:contextPath} TOMCAT=${env:HOSTNAME}:${env:CONNECTOR_PORT}${sys:line.separator}</footer> 
      </PatternLayout> 
      <Policies> 
       <TimeBasedTriggeringPolicy/> 
      </Policies> 
     </RollingFile> 
    </Appenders> 
    <Loggers> 
     <Logger name="root" level="debug" additivity="false"> 
      <appender-ref ref="RollingFileAppender" level="debug"/> 
     </Logger> 
     <Root level="debug" additivity="false"> 
      <AppenderRef ref="RollingFileAppender"/> 
     </Root> 
    </Loggers> 
</Configuration> 
+0

私たちは現在、log4j2 v2.5' jarsを使用するよう強制されています。私はWindowsホスティングのTomcatでデプロイメントを実行しました。ウィンドウ上では、セットアップ時と同じようにロールオーバーが正常に機能しました。しかし、TomcatがLinux上で動作しているときはそうではありません。私はWARとTomcatの両方のlibのすべてのjarのバージョンをチェックしました。そして、私はすべてのjarのバージョンがLinuxとWindowsのセットアップの間で一致していることを確信しています。今までLinuxでロールオーバーを実行する唯一の方法は、代わりに 'CronTriggeringPolicy'を使用しており、ロールオーバーファイルの日付が前日のものであることを確認するためにトリガを' '0 59 23 * *?" 'に設定しました。 –

+0

私はLinux上で正常にテストしたので、私の答えを更新しました。どのLinuxを使用していますか? – VivekRatanSinha

関連する問題