tips/JAVA/Throwable printStackTrace() の結果を文字列として取り出す(2 of 2)
2008-03-13 (木) 01:46:00 (5859d)
Throwable printStackTrace() の結果を文字列として取り出す(2 of 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 で返すようなメソッドが用意されていてもよいように思いますが。。。