0

以前はJBossでホストされていたgrailsアプリケーションに取り組んでいますが、現在はApacheTomcatに移行しています。

log4jを使用するJBossのGrailsアプリは完全に機能しますがorg.apache.log4j.DailyRollingFileAppender、アプリケーションロギングとサーバーロギングの両方にApache Tomcatでlog4jを使用しているため、問題が発生しています。

問題はorg.apache.log4j.DailyRollingFileAppender、古いバックアップログファイルを上書きし(たとえば、日付8のログに日付9のログがあり、8のログが見つからない)、前日のバックアップファイルへのログインを開始する場合があることです。

JBossでラッパーを作成したため、このアペンダーの問題が何であるかはわかりませんorg.jboss.logging.appender.DailyRollingFileAppender。何か問題はありますorg.apache.log4j.DailyRollingFileAppenderか?解決策を提案していただけますか?

<appender class="org.apache.log4j.DailyRollingFileAppender" name="FILE">
    <errorHandler class="org.apache.log4j.helpers.OnlyOnceErrorHandler"/>
<param name="Threshold" value="INFO"/> 
<param name="File" value="${catalina.base}/logs/applog.log"/>
 <param name="Append" value="true"/>
      <param name="DatePattern" value="'.'yyyy-MM-dd"/>
          <layout class="org.apache.log4j.PatternLayout">
              <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss,SSS Z} level=%-5p class=%c %X{uniqueId} %X{hostname} %X{requestURI} %X{clientIP} %X{userId} %X{realmId} %X{sessionId} %X{locale} %X{callingHost} %X{uniqueIdCallingHost} %X{asyncUserId} %X{isAsync} %X{taskId} %m%n"/>
      </layout>
   </appender>

これは機能していなかったので、org.apache.log4j.rolling.RollingFileAppenderlog4jの「extras」ライブラリを使用して使用します。以下はアペンダーの構成ですが、それでも正しく機能しません。

<appender name="ROLL" class="org.apache.log4j.rolling.RollingFileAppender">
    <param name="File" value="${catalina.base}/logs/paymentRolling.log" />
    <param name="Threshold" value="INFO"/> 
    <param name="Append" value="true"/>
   <rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
      <param name="FileNamePattern" value="${catalina.base}/logs/appRolling.log.%d{yyyy-MM-dd}"/>
    </rollingPolicy>
    <layout class="org.apache.log4j.PatternLayout">
      <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss,SSS Z} level=%-5p class=%c %X{uniqueId} %X{hostname} %X{requestURI} %X{clientIP} %X{userId} %X{realmId} %X{sessionId} %X{locale} %X{callingHost} %X{uniqueIdCallingHost} %X{asyncUserId} %X{isAsync} %X{taskId} %m%n"/>
    </layout>
  </appender>
4

1 に答える 1

0

XML構成がすべてにどのように機能するかはわかりませんが、(プロパティベースの)構成と非常によく似ており、期待どおりに機能します。

This is our log4j configuration and it works exactly as we expect it to:
log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A1.file = /path/to/logs/log4j.log
# Roll-over the log once a day
log4j.appender.A1.DatePattern='.'yyyy-MM-dd
log4j.appender.A1.layout = org.apache.log4j.PatternLayout
log4j.appender.A1.layout.conversionPattern = %d [%t] %-5p %c- %m%n
log4j.appender.A1.append = true

ロギングを妨げる可能性のあるものがいくつかあります。

  1. サーバーロギングとwebappロギングの両方にlog4jを使用している場合は、サーバーと個々のWebアプリの両方が同じファイルに書き込んでいる可能性があります。つまり、2つのロガーがお互いのつま先を踏んでいる可能性があります。各log4j構成(サーバー、各Webアプリケーション)が完全に別個のファイルに書き込んでいることを確認してください。

  2. システム時刻(具体的にはタイムゾーン)がTomcatプロセスやログファイルを表示しているユーザーの時刻と異なる場合、予期しないときにログファイルがロールオーバーすることがあります。たとえば、私は現在UTC-04:00のワシントンDCに住んでいます。TomcatユーザーのタイムゾーンがUTCに設定されているが、シェルアカウントが現地時間を表示するように構成されている場合、ログファイルは毎日00:00ではなく20:00にロールオーバーするように見えます。ただし、この場合、ログエントリはすべてUTCである必要があるため、ログファイルの内容が混乱することはありません。

于 2012-08-10T14:16:19.607 に答える