将Throwable.getStackTrace()的结果转换为描述堆栈跟踪的字符串最简单的方法是什么?


当前回答

Kotlin>=1.4

在Throwable上使用内置函数stackTraceToString()。

Kotlin<1.4

扩展Throwable类将提供String属性error.stackTraceString:

val Throwable.stackTraceString: String
  get() {
    val sw = StringWriter()
    val pw = PrintWriter(sw)
    this.printStackTrace(pw)
    return sw.toString()
  }

其他回答

Arrays.toString(thrown.getStackTrace())

是将结果转换为字符串的最简单方法我在程序中使用这个来打印堆栈跟踪

LOGGER.log(Level.SEVERE, "Query Builder Issue Stack Trace : {0} ,Message : {1} objid {2}", new Object[]{Arrays.toString(e.getStackTrace()), e.getMessage(),objId});

可以使用以下方法将异常堆栈跟踪转换为字符串。该类在Apache commons-lang中可用,这是许多流行开源中最常见的依赖库

org.apache.commons.lang.exception.ExceptionUtils.getStackTrace(可丢弃)

我的oneliner将堆栈跟踪转换为封闭的多行字符串:

Stream.of(e.getStackTrace()).map((a) -> a.toString()).collect(Collectors.joining("\n", "[", "]"))

易于传递给记录器“原样”。

我想知道为什么没有人提到ExceptionUtils.getStackFrames(exception)

对我来说,这是将堆栈跟踪及其所有原因转储到底的最方便方法:

String.join("\n", ExceptionUtils.getStackFrames(exception));

番石榴的丢弃类

如果您有实际的Throwables实例,GoogleGuava提供Throwables.getStackTraceAsString()。

例子:

String s = Throwables.getStackTraceAsString ( myException ) ;