这篇文章主要介绍了Java如何获取异常堆栈信息,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
Java获取异常堆栈信息的两种方法,以下是全部内容:
(stack trace)异常栈轨迹是指:
当throw Throwable 时,Throwable对象抛出过程(穿梭)所经历的多个方法调用层(方法调用栈)。越接近 throw 语句的方法先进入异常栈。
(Throwable Causal Chain)异常原因链:
在Throwable类中的cause属性,表示被当前异常包装的原始异常。(可以称为异常原因)
在打印异常栈轨迹时,会递归打印 原始异常的异常栈。
现在来分析一下 Throwable.printStackTrace() 方法。
在Throwable.printStackTrace(PrintStreamOrWriter s) 内部,我们可以看到:
在打印异常栈时,是先打印 当前异常对象this的异常栈。
然后再打印 异常原因链。(递归打印 原始异常的异常栈)
synchronized (s.lock()) { // Print our stack trace // 1. 先打印 当前异常对象this的 异常栈。 s.println(this); StackTraceElement[] trace = getOurStackTrace(); for (StackTraceElement traceElement : trace) s.println("\tat " + traceElement); // Print suppressed exceptions, if any for (Throwable se : getSuppressed()) se.printEnclosedStackTrace(s, trace, SUPPRESSED_CAPTION, "\t", dejaVu); // Print cause, if any // 2. 打印 异常原因链 Throwable ourCause = getCause(); if (ourCause != null) ourCause.printEnclosedStackTrace(s, trace, CAUSE_CAPTION, "", dejaVu); }
Java获取异常堆栈信息
方法一:
public static String getStackTrace(Throwable t) { StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); try { t.printStackTrace(pw); return sw.toString(); } finally { pw.close(); } }
方法二:
org.apache.commons.lang3.exception.ExceptionUtils.getStackTrace(e);
感谢你能够认真阅读完这篇文章,希望小编分享的“Java如何获取异常堆栈信息”这篇文章对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,更多相关知识等着你来学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。