このようなAndroid例外でprintStackTrace()を使用するのは悪い考えですか?
} catch (Exception e) {
e.printStackTrace();
}
このようなAndroid例外でprintStackTrace()を使用するのは悪い考えですか?
} catch (Exception e) {
e.printStackTrace();
}
これが必要なものだと思います:
catch (Exception e) {
Log.e(TAG,Log.getStackTraceString(e));
}
はい、それは悪い考えです。代わりに、これらの目的のために特別に設計された Android の組み込みログ クラスを使用する必要があります: http://developer.android.com/reference/android/util/Log.html
デバッグ メッセージ、警告、エラーなどをログに記録するオプションを提供します。
エラーのロギング:
Log.e(TAG, "message", e)
メッセージは、例外がスローされたときに試行されていたことの説明にすることができます
または単にLog.e(TAG, e)
コンテキストにメッセージを提供したくない場合
次に、コードの実行中に下部にあるログ コンソールをクリックし、TAG またはログ メッセージ タイプをフィルターとして使用して簡単に検索できます。
はい。printStackTrace()
は便利ですが、特に Android では表示logcat
されますが、特定されていないレベルで適切なメッセージなしでログに記録されるため、お勧めできません。代わりに、例外をログに記録する適切な方法は...
Log.e(TAG, "Explanation of what was being attempted", e);
例外は、メッセージ パラメータに追加されるのではなく、3 番目のパラメータとして使用されることに注意してください。Log
は詳細を処理します – メッセージ (コードで何をしようとしていたかのコンテキストを提供します) とException
のメッセージ、およびそのスタック トレースを出力します。
の使用を避けprintStackTrace()
、ロギング システムと例外のサポートを使用します。
log.log(Level.SEVERE, "Uncaught exception", e);
したがって、ロギングの処理方法を変更したい場合は、はるかに簡単です。
問題は次のとおりです。Andriod アプリケーション コンテキストでスタック トレースに出力するのはまったく有用ですか? 標準出力は実行時に表示されますか? 誰かがそれを気にしますか?
要点は、誰も標準出力をチェックしてエラーをデバッグしようとしない場合、このメソッドへの呼び出しはデッド コードであり、スタック トレース メッセージを作成するのに無駄な費用がかかるということです。開発時のデバッグにのみ必要な場合は、アクセス可能なグローバル定数を設定し、実行時に確認できます。
} catch (Exception e) {
if(com.foo.MyEnvironmentConstants.isDebugging()) {
e.printStackTrace();
} //else do noting
}