log4net使用時のログの排他制御 | なんちゃってエンジニアのメモ
テーマ:
複数人が同時実行するコンソールアプリのログ出力を
log4net で作成したら、ログが複数に…

log4net の 設定だけでなんとからないかと調査してみたら解決できたのでメモ。

以下が試した設定(部分的に抜粋)

[設定1]
<param name="AppendToFile" value="true" />

value=true となっていると追加書き込み(falseの場合は上書き)となります。
先に実行したプロセスがログに書き込み中だと、
次に実行したプロセスのログが別なファイルで作成されてしまう…
↓の感じ

なんちゃってエンジニアのメモ-log4net排他制御時のログ出力


[設定2]
「設定1」 は変更せず、排他制御の設定(lockingModel)を追加
<param name="AppendToFile" value="true" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />

同一ログには出力されるようになり、2つのプロセスでの実効順にログが出力された。
ただし、実行プロセス単位のまとまりでログに出力されないのでわかりづらい…
(ユニークIDにみたいなのを渡せば良いんだろうけど、見づらいどか言われそうなので却下。時系列に順次出力する必要がないし…)
なんちゃってエンジニアのメモ-log4net設定2


[設定3]
「設定2」に、バッファリング設定(ImmediateFlush)を追加
<param name="AppendToFile" value="true" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<ImmediateFlush value="false"/>

すると!

なんちゃってエンジニアのメモ

みたいな感じで実行単位でのログ出力が可能に。
要件的には問題ないので、これに決定。


でも、時系列に出力されないのは個人的に微妙…
かっちょわるい気がする…
本当は、DBとかに出力してSQLで実行単位に検索するのが良いんだろうけど、
今回は、ツールのログなのでDBを使うわけにもいかず、いたしかたなしです。

参考サイト
http://ameblo.jp/yukkov/entry-10473035979.html