一体なぜそんなことをするのかという質問を少し忘れてください。何らかの理由で、2 つの FileAppender が同じファイルで構成されている場合、このセットアップは機能しますか?
3 に答える
Log4jのFileAppenderでは、2つのJVMが同じファイルに書き込むことはできません。試してみると、破損したログファイルが表示されます。ただし、log4jの後継であるlogbackは、慎重なモードでは、異なるJVMでも2つのアペンダーが同じファイルに書き込むことができます。
あなたの質問に直接答えることはできませんが、log4*net* の FileAppender には LockingModel 属性があり、ファイルが実際に使用されているときにのみロックするように設定できます。したがって、MinimalLock が設定された同じスレッドで 2 つの FileAppender が動作している場合、おそらく問題なく動作します。別のスレッドでは、たまにデッドロックが発生することがあります。
FileAppender は、LockingModel プロパティを介してプラグ可能なファイル ロック モデルをサポートします。FileAppender.ExclusiveLock によって実装されるデフォルトの動作は、このアペンダーが閉じられるまでファイルの排他的書き込みロックを取得することです。別のモデルである FileAppender.MinimalLock は、アペンダーがロギング イベントを書き込んでいる間だけ、書き込みロックを保持します。
log4j での MinimalLock の実装に関して、ざっと Web 検索を行っても、有用な結果は得られませんでした。