« Throwable#printStackTrace() の結果を文字列として取り出す(1/2) | メイン | org.eclipse.ui.editors 拡張 : ポップアップメニューの「開く」に表示されない »
2006年08月24日
Throwable#printStackTrace() の結果を文字列として取り出す(2/2)
printStackTrace(PrintWriter) ではうまくいかない場合があるため、 実際には Throwable#getStackTrace() を用いる方が簡便かもしれません。 (JRE 1.4 以降)
このメソッドはスタックトレースの内容を StackTraceElement 配列として取得できます。 配列の一つ一つの内容を文字列に直せば、 printStackTrace() と同様の結果を得ることができます。 (ただしタブや改行などの整形は行う必要があります)
例)
public class StackTracePrintTest {
...
private String getStackTraceString(Throwable ex) throws IOException {
StringBuffer buf = new StringBuffer();
buf.append(ex.toString());
buf.append("\n");
// スタックトレースの内容を取得
StackTraceElement[] sts = ex.getStackTrace();
for (int i = 0; i < sts.length; i++) {
buf.append("\tat ");
buf.append(sts[i].toString());
buf.append("\n");
}
// Cause Throwable が存在する場合
Throwable cause = ex.getCause();
if (cause != null) {
buf.append("Caused by: ");
buf.append(this.getStackTraceString(cause));
}
return buf.toString();
}
}
上記のようにすれば、スタックトレースの内容を文字列に出力することができます。 ただし自前でこの処理を作るよりは、 やはり printStackTrace() の内容をそのまま String で返すようなメソッドが用意されていてもよいように思いますが。。。
投稿者 kyohei : 2006年08月24日 22:49
トラックバック
このエントリーのトラックバックURL:
http://240k.jp/cgi-bin/MT333/mt-tb.cgi/344
コメント
world class call center definition
投稿者 serega : 2008年01月31日 11:54