2

同じ JVM および Tomcat インスタンスで実行されている 2 つのコンテキストがあり、ログバック RollingFileAppender を使用して同じログ ファイルに書き込みたいと考えています。ログバック RollingFileAppender は、同じファイルを使用した場合に問題を防ぐために同期されていますか? ファイルのロールオーバーが正しく機能せず、一部のログが上書きされるのではないかと心配しています。

ログバックのドキュメントでは慎重なモードについて言及されていますが、これはパフォーマンスの低下を示しており、異なる JVM からの同じファイルへのロギングのみを参照しています。同じ JVM で実行します。

これが私の logback.xml の例です。これを、コンテキストごとに 2 つの個別の WAR ファイルに入れたいと思います。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

  <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${catalina.base}/logs/portal.log</file>
      <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    <fileNamePattern>portal.%d.log</fileNamePattern>
    <maxHistory>30</maxHistory>
  </rollingPolicy>
  <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
        <maxFileSize>100MB</maxFileSize>
      </triggeringPolicy>  
      <encoder>
        <pattern>%d [%t] %-5p %c - %m%n</pattern>
      </encoder>
  </appender>

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

2 に答える 2

1

ソースを見ると、doAppend() メソッドが同期されていることがわかります。rollover() メソッドのコメントは、doAppend() が同期されているため、同期する必要がないことを示しています。

http://grepcode.com/file/repo1.maven.org/maven2/ch.qos.logback/logback-core/0.9.3/ch/qos/logback/core/AppenderBase.java#AppenderBase.doAppend%28java. lang.Object%29

http://grepcode.com/file/repo1.maven.org/maven2/ch.qos.logback/logback-core/0.9.3/ch/qos/logback/core/AppenderBase.java#AppenderBase.doAppend%28java. lang.Object%29

ただし、まだ問題が発生する可能性があります。

于 2013-02-11T14:58:45.003 に答える
0

私はこの方法で RollingFileAppender を使用しており、あなたと同じ問題に直面しています。<file>構成から要素を削除した場合にのみ機能するようです。ただし、すべてのファイルにはegportal.2013-12-03.logなどの名前が付けられます。あなたがそれで生きることができるなら、そこに行きます。

それでも、アクティブ ログのような一定のファイル名が必要portal.logです。これらのログ ファイルに対して何らかの監視が実行されているからです。しかし、私はまだそれがどのように可能であるかを知りません。ここでもWindowsがトラブルを起こしていると思います...

于 2013-12-03T16:48:16.093 に答える