しおいのブログ

2008/05/08

Enterprise LibraryのLogging ABでロックが発生した場合の回避方法

よくLogging ABをstaticメソッドでラップして使用していると思いますが、
ASP.NETで二つ以上のアプリケーションプールから同一ファイルに書き込もうとしたり、
プロセスリサイクリングのタイミングでロックがかかってファイルに書き込めなかったりします。
しかもプレフィックスにGUIDのついたファイルが生成されて、以後ずっとそこに書き込み。
たまにどこにも書き込みされなくて、大事なログが取得できないことも・・・。

そんなときは、Logger.Writeメソッドの後に以下を書きましょう。
Logger.Writer.Dispose();

これで書き込みできますよ。

パフォーマンスツールで高付加をかけた場合はそれでもGUIDのついたファイルが生成されますが、
ほんとにほぼ同時に書き込みが発生したのみだけ生成されます。これはLogging ABの仕様ですね。
でも以後はターゲットとなるログファイルに書き込み続けます。