17

同じ tomcat で複数の Web アプリケーションを実行しています。

2 つの質問があります。

1-検索すると、複数のアプリケーションが存在する場合、同じファイルにログインすると問題が発生する可能性があることがわかりました。同じ Web サーバー上で複数のアプリケーションを実行している場合はそうですか? デフォルトの stdout 出力が使用されている場合も正しいですか?

2- Logback ライブラリには、慎重なモードがあります。

慎重モードでは、FileAppender は、別の JVM で実行されている他の FileAppender インスタンスが存在する場合でも、指定されたファイルに安全に書き込みます。別のホストで実行されている可能性があります。慎重モードのデフォルト値は false です。

Logback の使用が複数の JVM でのみ有利なのか、それとも同じ Web サーバーで実行されている複数のアプリケーションにも有利なのかを知りたいですか? そうでない場合、この点でlog4jと同じですか?

ありがとう

4

4 に答える 4

19

log4j と logback の両方で、複数のFileAppenderインスタンスが同じログ ファイルに書き込む場合、ログ ファイルが破損するリスクが高くなります。インスタンスが同じ JVM で実行されるか、FileAppender異なる JVM で実行されるかは関係ありません。つまり、破損のリスクは同じです。

ドキュメントに記載されているように、慎重なモードでは、ログバックは、同じまたは異なる JVM で実行されているFileAppender他のインスタンスが存在し、別のホストで実行されている可能性がある場合でも、破損を回避します。FileAppenderデフォルトでは、慎重モードは無効になっています。

コンソールは壊れないので、問題はありません。

于 2012-08-14T09:59:27.003 に答える
4

明確にしなければならないことが 1 つあります。同じ JVM で実行されているかどうかに関係なく、 Log4j の異なるインスタンスが同じファイルに同時に書き込みを行うと問題が発生します。

サーバー (および異なるクラスローダー) を使用する場合、デプロイと構成に応じて、単一のサーバー全体のインスタンスまたは Log4j の複数のインスタンスを持つことができます。

  1. 上記を参照。Stdout は、同じ混合出力の問題を被る可能性がありますが、ファイルをローテーションする場合はそうではありません。
  2. Logback の慎重なモードは、異なるインスタンス (同じ JVM であるかどうかにかかわらず) による同時書き込みに対応します。構成でサーバー全体の Log4j インスタンスを使用している場合、この側面には利点がありません。
于 2012-08-13T14:47:32.670 に答える
2

Filelocks の使用は実際には効率的/安全ではないため、異なるアペンダー/JVM の作品から同じファイルにログを記録している間はお勧めしません。logback-appenders-faqから直接取得した構成を参照してください。

<configuration>
  <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <!-- Support multiple-JVM writing to the same log file -->
    <prudent>true</prudent>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <fileNamePattern>logFile.%d{yyyy-MM-dd}.log</fileNamePattern>
      <maxHistory>30</maxHistory> 
    </rollingPolicy>

    <encoder>
      <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
    </encoder>
  </appender> 

  <root level="DEBUG">
    <appender-ref ref="FILE" />
  </root>
</configuration>

複数の JVM が統一されたソースに書き込むための他のオプションは、SocketAppendersJDBCAppenderです。

ただし、JDBCAppenderは将来的に完全に置き換えられる予定であり、推奨されません。logbacks メーリングリスト を参照してください

SocketAppenders は、おそらくログバック用のコードをあまり書くつもりがなかったので、少し未加工かもしれません。

もう1つのオプションがあります。あなたが抱えている問題を正確に解決するために構築されたclusterlogのようなものを使用できます。

于 2012-09-25T08:48:52.387 に答える
1
  1. はい。一般に、原則として、アプリケーションごとに (Web であるかどうかに関係なく) 異なるログ ファイルを作成する必要があります。別の方法は、書き込むファイルの決定をサーバーに任せることです。JBoss には一般的にログアウトする方法があり、同じファイルに移動します。ただし、アプリケーションごとに個別のログを作成することを好みます。
  2. 私の知る限り、log4j と Logback はどちらも、アプリケーションに発生する可能性のあるオーバーヘッドを最小限に抑えることを目指しているため、より有利な方法はありそうにありません。複数の JVM が必要な場合は、Logback の方が処理に適していると思いますが、これ以外で使用することは悪い考えではありません。
于 2012-08-12T22:51:21.633 に答える