Java异常toString()包含原因

时间:2013-07-31 06:49:35

标签: java exception tostring throwable

是否有任何好的函数收集字符串中异常的所有原因? 方法printStackTrace()使用StackTraces收集它们:

   HighLevelException: MidLevelException: LowLevelException
           at Junk.a(Junk.java:13)
           at Junk.main(Junk.java:4)
   Caused by: MidLevelException: LowLevelException
           at Junk.c(Junk.java:23)
           at Junk.b(Junk.java:17)
           at Junk.a(Junk.java:11)
           ... 1 more
   Caused by: LowLevelException
           at Junk.e(Junk.java:30)
           at Junk.d(Junk.java:27)
           at Junk.c(Junk.java:21)
           ... 3 more

但我只想要getMessage()原因:

   HighLevelException: MidLevelException: LowLevelException
   Caused by: MidLevelException: LowLevelException
   Caused by: LowLevelException

我应该写自己的功能吗?

2 个答案:

答案 0 :(得分:5)

是的,您必须为此编写一个简单的方法

static String message(Throwable e) {
    StringBuilder sb = new StringBuilder();
    sb.append(e.getMessage());
    Throwable t = e.getCause();
    while (t != null) {
        sb.append("\nCaused by: ").append(t.getMessage());
        t = t.getCause();
    }
    return sb.toString();
}

答案 1 :(得分:1)

您可以创建自定义异常并覆盖getMessage()函数。

这是我收集Stacktraces的示例:

@Override
public String getMessage()
{
    for (StackTraceElement element : this.getStackTrace() ){
              result.append( element );
              result.append( NEW_LINE );
            }
            return result.toString();
}

您可以使用自己的代码版本来满足您的要求。