2

Log4jを正しく構成するのに問題があります。次のように構成すると、Log4jが深夜にcatalina.outファイルをローテーションすることを期待していました


。log4j.properties:

log4j.rootLogger=INFO, CATALINA

# Define all the appenders
log4j.appender.CATALINA=org.apache.log4j.DailyRollingFileAppender
log4j.appender.CATALINA.File=/var/log/tomcat7/catalina.out
log4j.appender.CATALINA.Append=true
log4j.appender.CATALINA.Encoding=UTF-8

# Roll-over the log once per day
log4j.appender.CATALINA.DatePattern='.'yyyy-MM-dd-HH-mm'.log'
log4j.appender.CATALINA.layout = org.apache.log4j.PatternLayout
log4j.appender.CATALINA.layout.ConversionPattern =%d{HH:mm:ss} %5p [%t] - %m%n


構成後、Tomcatを再起動すると、すべてが次のように書き込まれます。

/var/log/tomcat7/catalina.out


構成をテストするために、現在の日時を23:59:59のように変更しました。

#ls -l /var/log/tomcat7/
-rw-r--r-- 1 tomcat7 tomcat7 5840  4. May 00:00 catalina.out


ご覧のとおり、真夜中に回転しませんでした...(?)

Tomcatを再起動すると、完全に正常に機能します。

#ls -l /var/log/tomcat7/
-rw-r--r-- 1 tomcat7 tomcat7 5840  4. May 13:37 catalina.out
-rw-r--r-- 1 tomcat7 root    2395  4. May 00:00 catalina.out.*CURRENTDATE*.log

Tomcatを再起動せずにログファイルをローテーションすることも可能ですか?

よろしくお願いします、マーリー

4

2 に答える 2

9

この問題には3つの解決策があります。

  1. catalina.outに書き込むデフォルトのTomcatロギングファサードをたとえばslf4jに変更し、それとlog4jの使用に伴うすべての利点を提供します。
  2. Tomcatログファイルのlogrotateを実行するようにシステムcronを構成します
  3. デフォルトのロギングクラスをConsoleAppenderからFileAppenderに変更します。

ソリューションの利点:

  1. slf4jは、特にlog4jで多くのオプションを提供するため、非常に柔軟性があります。
  2. シンプルで、Tomcat構成に触れる必要はありません。
  3. コンソール出力を無効にする構成の簡単な変更

短所:

  1. 追加のライブラリが必要であり、tomcatがホストしているすべてのアプリケーションに影響し、デフォルト構成をlog4jに置き換える必要があります。
  2. cron+logrotateはLinuxでのみ機能します。スケジューラを備えたウィンドウでは、それほど単純ではない場合があります。Windows環境では追加のスクリプトが必要です。
  3. 日付付きの単純なバックアップのみを提供します。日付パターンは設定できません。ローテーションされたファイルを圧縮しません。

    最初の問題の解決策はここ
    で説明されています 2番目の問題の解決策はここ
    で説明されています 3番目の問題の解決策はここで説明されています

ソリューションを組み合わせることもできます。たとえば、crontabを使用して、catalina.outを他の名前に変更して作成されたファイルをgzipで圧縮します。また、Tomcatをそのままにして、catalina.outにログを記録し、log4jを使用してアプリケーションを別のファイルに構成することをお勧めします。このようにして、重要ではないTomcatからのログがログをスパムすることはありません。

于 2013-09-05T19:28:44.290 に答える
1

Tomcatを再起動せずにログファイルをローテーションすることも可能ですか?

はい、あなたがそれのために働く気があるなら。

log4j構成は、bin/catalina.shがstdoutをlogs/catalina.outにリダイレクトするために使用する標準のシェルリダイレクトとのみ競合することになります。log4j構成を使用して、System.outの動作を変更することはできません。

conf / catalina.outをローテーションする場合は、Tomcatの起動方法に応じていくつかの代替手段を講じる必要があります。

  • jsvcを使用してTomcatを起動し、commons-daemon 1.0.4以降を使用している場合は、SIGUSR1をjsvcプロセスに送信して、ログファイルを再度開くことができます。これにより、既存のログファイルを別のファイルに移動して(名前を変更し、新しいファイル名にログを記録し続ける)、「killSIGUSR1」を実行できます。元のファイル名が再度開かれ、新しいログメッセージが表示されます。それに行きます。
  • bin / catalina.shを使用してTomcatを起動する場合は、リダイレクトを行わず、代わりに出力をApachehttpdのrotatelogsやchronologなどのローリングロガープロセスにパイプするように変更できます。
于 2012-05-16T00:32:35.533 に答える