2

Java アプリケーションでコモンズ ロギングを使用しており、スタック トレースから例外をログに記録したいと考えています。

catch( Exception exception ) {
         logger.error( "FailedCreateActivityFunction Exception Occured : " , exception );
         throw new EngineException( getMessage( ERROR_FailedCreateActivityFunction, FunctionName ), exception );
      }

これは例外を2回スローしますか? はいの場合、それを修正する方法は?

例外の代わりに+ 例外を使用して、このように使用することの違いは何ですか

logger.error( "FailedCreateActivityFunction Exception Occured : " + exception );
4

2 に答える 2

4

いいえ、例外を 2 回スローすることはありません。このコードは EngineException のみをスローします。

ロギングと例外のスローを避ける必要があります。1 つのことだけを行ってください。ログとスローはアンチパターンです。ここで例外処理の詳細を読むことができます: Exception Handling Antipatterns

エラーメソッドを実行するこれら2つの方法の違いは次のとおりです。

  • in logger.error(String msg, Throwable t) - オブジェクトを渡すので、ロギング フレームワークにはより多くの情報があり、完全なスタック トレースを表示できます。
  • logger.error(String msg) で - String を作成します。追加情報はロギング フレームワークに渡されません
于 2012-12-28T10:19:16.960 に答える
1

いいえ、2回は投げません。

最初のメソッドは、メッセージと例外のスタック トレースを出力します。

2 番目のメソッドは、スタック トレースなしで、メッセージと例外メッセージ (エラーの簡単な説明を返すthrowable.toString() を呼び出す) のみを出力します。

于 2012-12-28T10:10:52.207 に答える