2012-01-23 12 views
0

クラスから呼び出しをログに記録しますが、このクラスを使用して複数のスレッドを操作します。私は、そのスレッドの呼び出しが私のFileAppendersによって捕捉されて使用されることを望みます。Logback/slf4j - 並行性の問題と出血

現時点では、ファイル内でデータが混在している「出血」があります。クラスの特定のインスタンスにアペンダーをロックするにはどうすればよいですか。

詳細が必要な場合はお知らせください。

+0

(1)クラスをモニターにするのはどうですか? (はい、同時に1つのスレッドへの並行性を減らします)。 (2)タイムスタンプで(各スレッドが独自のバッファを持つように)異なるバッファにログする。たいていバッファをファイルにダンプしますが、タイムスタンプでファイルをソートするようにしてください – Adrian

+0

申し訳ありません、Adrian、あなたはどういう意味ですか?それ以上の詳細は? –

+0

出血が何を意味するのかよく分かりません(他のもののログに混乱がありますか?)。私のコメントから理解できない部分はどれですか? – Adrian

答えて

1

特定のアペンダーに出力するようにパッケージと特定のクラスを構成できます。したがって、実際に特定のスレッドを出力するか、特定のクラスを使用するかどうかを検討してください。通常、私は後で必要です。例えば

、log4jの中でそれはどこにもキャッチされない場合は、クラスcom.foo.Barだけfoo.logファイルに記録します

<appender name="someLog" class="org.apache.log4j.FileAppender"> 
    <param name="File" value="/logs/foo.log"/> 
    <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="%d %5p %C{1} - %t - %m%n"/> 
    </layout> 
</appender> 

<category name="com.foo.Bar" additivity="false"> 
    <priority value="warn"/> 
    <appender-ref ref="someLog"/> 
</category> 

だろう。