【问题标题】:Java send Stack trace to different output streamJava将堆栈跟踪发送到不同的输出流
【发布时间】:2012-02-22 22:25:50
【问题描述】:

当我在 Java 应用程序中捕获异常时,我需要记录堆栈跟踪。我知道异常有一个内置的 printStackTrace() 方法,它可以将堆栈跟踪发送到不同的 PrintWriter/PrintStream,但是如果我可以将堆栈跟踪作为字符串抓取,以便我可以操作它或将其显示在 JMessagePane 或其他内容中。目前,我必须这样做的唯一方法是:

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

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

有没有更简洁的方法来做到这一点?

【问题讨论】:

  • 可能值得注意的是,printStackTrace 方法比问题正文中建议的替代方法做得更多。也就是说,它包括原因的堆栈跟踪(如果设置了一个)并从原因中排除任何与原始异常相同的StackTraceElement,因此短语... <int> more
  • 优点。这是我想要更优雅的方式来做到这一点的另一个原因。

标签: java exception stack-trace


【解决方案1】:

有:

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

【讨论】:

    【解决方案2】:

    使用 commons-lang :

    String stackTrace = ExceptionUtils.getStacktrace(e);
    

    javadoc:ExceptionUtils.html#getStackTrace().

    【讨论】:

      猜你喜欢
      • 2011-05-19
      • 1970-01-01
      • 2013-11-11
      • 1970-01-01
      • 2012-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-17
      相关资源
      最近更新 更多