exceptionutils.getstacktrace() 是 apache commons lang3 提供的静态方法,用于自动展开并格式化 throwable 的完整异常链,每层以“caused by:”分隔,输出符合 jvm 风格的可读堆栈字符串。

ExceptionUtils.getStackTrace() 是 Apache Commons Lang 提供的便捷方法,用于将 Throwable(包括异常及其嵌套原因)完整转为可读字符串,自动展开整个异常链(cause chain),无需手动递归遍历。
直接调用即可获取完整堆栈(含所有 cause)
该方法内部已处理异常链的递归展开逻辑。只要传入最外层异常(如 Exception 或 Error),它会自动遍历 getCause() 直到 null,并将每一层的类名、消息和堆栈行拼接成一个长字符串,每层之间用 "Caused by:" 分隔。
- 支持任意深度的嵌套异常(如 A → B → C → null)
- 输出格式规范,与 JVM 默认打印风格一致,便于日志记录或调试
- 不会丢失任何一层的堆栈信息,包括最内层原始异常
使用示例(带多层 cause)
假设你有如下异常链:
try {
throw new RuntimeException("顶层异常",
new IllegalArgumentException("中间异常",
new NullPointerException("根本原因")));
} catch (Exception e) {
String trace = ExceptionUtils.getStackTrace(e);
System.out.println(trace);
}
输出会类似:
java.lang.RuntimeException: 顶层异常
at ...
Caused by: java.lang.IllegalArgumentException: 中间异常
at ...
Caused by: java.lang.NullPointerException: 根本原因
at ...
注意点:仅适用于 Throwable 及其子类
该方法只接受 Throwable 类型参数,不能传入字符串或 null。若传入 null,会返回空字符串(不是异常);若传入非 Throwable 对象,编译不通过。
- 确保依赖已引入:
org.apache.commons:commons-lang3(Lang3,不是旧版 commons-lang) - Maven 坐标示例:
<version>3.12.0</version>或更高 - 静态导入可简化调用:
import static org.apache.commons.lang3.exception.ExceptionUtils.getStackTrace;
替代方案:自己递归拼接(不推荐)
虽然可以手写循环调用 getCause() 拼接,但容易遗漏格式细节(如缩进、"Caused by:" 大小写、换行处理等),且重复造轮子。除非有特殊定制需求(如过滤某类异常、添加时间戳),否则直接用 getStackTrace() 更安全可靠。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











