Log4Net でのエラーハンドリング
ログに関して思うところ有って・・・
今回のプロジェクトはログの出力部分は共通のモジュールを作成して、作成したコンポーネント(C++で作成したCOM)を各プログラムで利用している。
吐き先はファイル、それも何台もサーバーが有るのにファイルサーバーの共有フォルダをマウントしてファイルに書き込み。
それってどうなのかな〜っと。
パフォーマンスに関しても確実性に関しても
当然排他やバックアップはしてるけど・・・遅いよね?
ログのキューなんかがあって非同期に書き込みして受信側はキューからマッタリと読み込んで出力とかしたらどうなんだろう?っとか。
第一、今回のプロジェクト用にログのコンポーネントを新たに作成する必要が有ったんだろうか?
っとそこに疑問も。
で、既存のコンポーネントを使えないかと考えて思いついたのが Log4J の .NET 版の Log4Net
同じ、Apache プロジェクトのヤツ。
これを使って、とりあえずは今回の要件に使えるかどうかを検証してみた。
ネットから取得して、ちょっと設定して、プログラミング。
簡単に動いた。
ファイルに出すのもイベントログもデータベースもお手の物。
設定次第で好きなように変更可能だし。
流石だね〜簡単♪
で、問題になったのがエラーのハンドリング。
例えば、FileAppender を使っていて出力先のファイルがロックされていました(もしくはロックされた)
そのばあい、ログを出力するメソッドでは出力できなかったことに気づかないというか
戻り値も無いし例外も上がってこないし・・・
このエラーのハンドリングが出来ないと今回のプロジェクトには適応できない。
※置き換えは無理だけど今後のプロジェクトの為に、実プロジェクトの要件に合わせて試験を行っている。
色々なやんで結局は出来た。
後で、その方法は書いてみる予定。(ネットで探しても見つからなかった。同じ問題で悩んでいる人もいた。検索失敗の可能性もあるが・・・)
後は、Appender 毎に出力するレベルが変更できるかを試してみる予定。
例えば
FileAppender には DEBUG 以上
EventLogAppender には INFO 以上
SmtpAppender には ERROR 以上
って感じに。
こっちはまだ十分に検索してないのでネタがあるかもしれないけど・・・