2

エラー処理の設計方法に関する一般的な質問があります。コードでサードパーティのサービスを使用したいと考えています。通常、サービスをクライアント クラス内にラップします。次に、コードの残りの部分はクライアント クラスのみを処理し、フックの下の実際のサービスを認識しません。私のクライアント クラスには、エラーをログに記録するメカニズムがあります。ただし、サービスからの例外をキャッチして処理する必要はありません。理想的には、例外処理を無視して、例外を外部に伝播させる必要があります。ただし、例外をログに記録したい場合は、次のようにする必要があります。

try{
    .... // call 3rd party service;
}catch(Exception e){ // e is triggered from the service;
    Log.error("Oops, an error: " + e); // shall I log the exception??
    throw e; // don't swallow the exception;
}

一方で、私はこれをしたくありません。例外の処理とログは無視できます。クライアント クラスの呼び出し元が例外を処理したり、エラーをログに記録したりします。問題は、いつ例外をログに記録する必要があり、いつログに記録しないのかということです。いくつかの一般的な慣行と原則を聞きたいです。ありがとうございました。

4

3 に答える 3

1

すべてのレベルで例外をログに記録しないでください。「最上位」レベルでのみログに記録します。ログに記録しないと例外が見逃されるポイントでログに記録します。

于 2012-12-17T23:58:35.923 に答える
0

それはあなた次第です。私の推奨事項は、例外が本当に予期しないことを示している場合に例外をログに記録することです。確かに、「例外」という名前は、これが常に当てはまることを示しているように思われますが、必ずしもそうとは限りません。

コードは、例外的ではないシナリオに対して例外を返すことがあります。

場合によっては、コードが他のコードを呼び出して、特定のケースで例外を呼び出すことを知っていますが、例外のセットは "OK" です。

予期しないことが実際に起こったことを例外が示す場合がありますが、これは通常は悪いことです。そのときは、ログに記録するか、コードが大声で文句を言うようにすることをお勧めします。

于 2012-12-17T23:57:32.423 に答える
0

例外が発生する可能性がかなり低い場合、ログに記録しない本当の理由はありません。デバッグに役立つように例外をログに記録しない唯一の理由は、例外が継続的に発生している場合です。この特性を持つ例外がある場合は、例外が継続的にトリガーされないようにコードを記述することをお勧めします。

tl;dr: 例外は (うまくいけば) めったに発生しないため、ログに記録してください。

于 2012-12-17T23:59:50.340 に答える