60

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

} catch (Exception e) {
    e.printStackTrace();
}
4

5 に答える 5

48

これが必要なものだと思います:

catch (Exception e) {
     Log.e(TAG,Log.getStackTraceString(e)); 
}
于 2011-10-25T17:12:48.530 に答える
46

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

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

エラーのロギング:

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

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

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

于 2010-10-04T13:28:28.810 に答える
22

はい。printStackTrace()は便利ですが、特に Android では表示logcatされますが、特定されていないレベルで適切なメッセージなしでログに記録されるため、お勧めできません。代わりに、例外をログに記録する適切な方法は...

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

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

于 2016-05-05T18:05:09.153 に答える
9

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

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

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

于 2010-10-04T12:48:58.990 に答える
8

問題は次のとおりです。Andriod アプリケーション コンテキストでスタック トレースに出力するのはまったく有用ですか? 標準出力は実行時に表示されますか? 誰かがそれを気にしますか?

要点は、誰も標準出力をチェックしてエラーをデバッグしようとしない場合、このメソッドへの呼び出しはデッド コードであり、スタック トレース メッセージを作成するのに無駄な費用がかかるということです。開発時のデバッグにのみ必要な場合は、アクセス可能なグローバル定数を設定し、実行時に確認できます。

} catch (Exception e) {
   if(com.foo.MyEnvironmentConstants.isDebugging()) {
      e.printStackTrace();
   } //else do noting
}
于 2010-10-04T12:37:05.813 に答える