2012-02-22 22 views
0

次のライブラリコードに問題はありますか?ライブラリでの例外処理

try 
{ 
    // 
} 
catch (Exception ex) 
{ 
    CustomLogger.Log(ex.ToString()); //Write to log file 
    throw; 
} 

私はその例外処理が一番独自のログを持つべきではない、実際にアプリケーション

+0

ライブラリライターへの2つの要求:1.ベースクラスの例外をスローしないでください。 2.メソッドによってスローされた例外(少なくともより一般的なもの)を文書化する。 – TrueWill

答えて

5

Aフレームワークに任されているどこかで読んだことがあります。アプリケーションがロギングプロバイダを提供できるようにする必要があります。

アプリケーションがこのような場合にロギングプロバイダを提供した場合、実際のコードは正常です(例外をログに記録してから再スローする)。それ以外の場合は、Exceptionがアプリケーションのためにバブルアップして、どのように見えるかをログに記録します。

+0

ロギングプロバイダについて聞いたことがありません。これについての詳しい情報はどこで入手できますか? – blitzkriegz

+0

@blitzkriegz - それは必ずしもより多くの情報を得るためのものではありません。 Enterprise Library Loggingブロックを実装するのは、ILoggingProviderインターフェイスをライブラリに実装している単純な方法と同じくらい複雑なものでも、呼び出し元がコンストラクタパラメータを使用して実装および提供する必要があります。 –

0

あなたは、APIにプログラムのエラーと状態を記録させることができます。このようにすれば、ログを見てAPIをデバッグする方が簡単です。これに加えて、呼び出し元がエラーを知っているので、意味のある方法でそれを処理しようとするために、例外を戻すべきです。ログだけでスローしない場合、呼び出し元は混乱したり、変更のログファイルを監視したり、そこからの例外を推測する必要があります。

私の主張は、ログしてもそれを投げることです。