2012-02-22 13 views
9

Javaアプリケーションで例外を検出するときにスタックトレースを記録する必要があります。私は例外がprintStackTrace()メソッドに組み込まれていて、スタックトレースを別のPrintWriter/PrintStreamに送ることができることを知っていますが、スタックトレースをStringとして取得して操作できるようにすると便利ですJMessagePaneなどで現在、これを行う唯一の方法は次のとおりです。Javaはスタックトレースを別の出力ストリームに送信します

String stackTrace = ""; 
stackTrace += e.getClass().getName() + ": " + e.getMessage() + "\n"; 

for (StackTraceElement elt : e.getStackTrace()) { 
    stackTrace += "\tat " + elt + "\n"; 
} 

これを行うにはもっとクリーンな方法がありますか?

+1

「printStackTrace」メソッドは、質問本体で提案されている他の方法よりもはるかに優れていることに気づくはずです。つまり、もしそれが設定されていれば、原因のためのスタックトレースを含み、元の例外に共通の原因から 'StackTraceElement'を除外します。したがって、 '... more'というフレーズ –

+0

が優勢です。それが私がよりエレガントなやり方をしたいもう一つの理由です。 – ewok

答えて

20

あり:

StringWriter writer = new StringWriter(); 
e.printStackTrace(new PrintWriter(writer)); 
String stackTrace = writer.toString(); 
4

使っコモンズ・ラング:

String stackTrace = ExceptionUtils.getStacktrace(e); 

のjavadoc:ExceptionUtils.html#getStackTrace()

+0

+1;書式設定のビットを追加しました。 –

関連する問題