web-dev-qa-db-ja.com

caugt例外にprintStackTrace()を使用するのは悪い考えですか?

Androidこのような例外でprintStackTrace()を使用するのは悪い考えですか?

} catch (Exception e) {
    e.printStackTrace();
}
55
jacknad

はい、それは悪い考えです。代わりに、これらの目的のために特別に設計されたAndroidの組み込みログクラスを使用する必要があります。 http://developer.Android.com/reference/Android/util/Log.html

デバッグメッセージ、警告、エラーなどを記録するオプションを提供します。

エラーのロギング:

Log.e(TAG, "message", e)ここで、メッセージは、例外がスローされたときに試行された内容の説明になります。

または単にコンテキストにメッセージを提供したくない場合はLog.e(TAG, e)

その後、コードの実行中に下部のログコンソールをクリックし、TAGまたはログメッセージタイプをフィルターとして使用して簡単に検索できます

37
Julian

私はこれがあなたが必要とするものだと信じています:

catch (Exception e) {
     Log.e(TAG,Log.getStackTraceString(e)); 
}
46
Adil Atilgan

はい。 printStackTrace()は便利ですが、特にAndroidでlogcatを介して表示されますが、適切なメッセージなしで指定されていないレベルでログに記録されます。例外を記録する適切な方法は...

Log.e(TAG, "Explanation of what was being attempted", e);

例外は、メッセージパラメーターに追加されるのではなく、3番目のパラメーターとして使用されることに注意してください。 Logが詳細を処理します–メッセージ(コードで実行しようとしていたことのコンテキストを提供します)とExceptionのメッセージ、およびスタックトレースを出力します。

19
spaaarky21

printStackTrace()の使用を避け、ロギングシステムとその例外のサポートを使用します。

log.log(Level.SEVERE, "Uncaught exception", e);

したがって、ロギングの処理方法を変更する場合は、はるかに簡単です。

9
Ryan

質問は次のとおりです。Andriodアプリケーションコンテキストのスタックトレースへの出力はすべて役に立ちますか?実行時に標準出力が表示されますか?誰かがそれを気にしますか?

私のポイントは、誰も標準出力をチェックせず、エラーのデバッグに注意を払わない場合、このメソッドの呼び出しはデッドコードであり、スタックトレースメッセージの作成は価値のない費用であるということです。開発時のデバッグにのみ必要な場合は、アクセス可能なグローバル定数を設定し、実行時に確認できます。

} catch (Exception e) {
   if(com.foo.MyEnvironmentConstants.isDebugging()) {
      e.printStackTrace();
   } //else do noting
}
9
Tomas Narros