次のようなアプリケーション コードがあるとします。
public void DoSomething()
{
if (SomethingBad)
throw new SomethingBadException("You did something bad");
// Keep going...
}
私はlog4netを使用していますが、理想的にはその例外をログに記録したいと思いますが、次の注意事項があります:
- この時点で例外をログに記録したいのですが、呼び出し元に依存してログに記録する必要はありません
- ロガー名が正しくなるように、このクラスが所有するロガーを使用して例外をログに記録したい
- この特定の例外タイプをログに記録したい場合もあれば、記録したくない場合もあるため、SomethingBadException にロギングについて知らせたくありません。NotSupportedException などの組み込み例外タイプにも同じパターンを使用したい
- 例外/ロギング ステートメントが複雑すぎない再利用可能なパターンが必要です。ほとんどの作業を行うユーティリティ クラスを作成する必要がある場合は、これで問題ありません。
- コール スタックを含む例外をログに記録したいのですが、これは、例外がスローされた後にログに記録する必要があることを意味します。例外が構築された後、例外がスローされる前にログに記録すると、ログ出力に空の呼び出しスタックが表示されます。
私はこれらの項目のほとんどを達成するユーティリティ コードをいくつか書くことができましたが、コール スタックのキャプチャを含む最後のコードは私にはわかりません。
これらすべてを達成する方法はありますか?カスタム log4net 拡張機能を喜んで作成します。また、Ninject の log4net 拡張機能を使用して、ロガーを作成しています。
私は間違った木を吠えていますか?私が行きたいところに私を連れて行く完全に別のアプローチはありますか?