Je pense que vous voulez obtenir la sortie de Throwable.printStackTrace()
, exactement comme ce que je cherchais. J'ai vérifié le code source Java et mis en place un String
au lieu d'écrire dans un PrintStream
. C'est un peu plus complet que la solution @MartijnCourteaux mais me semble un peu comme un hack.
Quant à votre réponse, vous pouvez en fait voir que Throwable.toString()
n'est qu'une partie de Throwable.printStackTrace()
:
public static String getStackTraceString(Throwable e) {
return getStackTraceString(e, "");
}
private static String getStackTraceString(Throwable e, String indent) {
StringBuilder sb = new StringBuilder();
sb.append(e.toString());
sb.append("\n");
StackTraceElement[] stack = e.getStackTrace();
if (stack != null) {
for (StackTraceElement stackTraceElement : stack) {
sb.append(indent);
sb.append("\tat ");
sb.append(stackTraceElement.toString());
sb.append("\n");
}
}
Throwable[] suppressedExceptions = e.getSuppressed();
// Print suppressed exceptions indented one level deeper.
if (suppressedExceptions != null) {
for (Throwable throwable : suppressedExceptions) {
sb.append(indent);
sb.append("\tSuppressed: ");
sb.append(getStackTraceString(throwable, indent + "\t"));
}
}
Throwable cause = e.getCause();
if (cause != null) {
sb.append(indent);
sb.append("Caused by: ");
sb.append(getStackTraceString(cause, indent));
}
return sb.toString();
}