exceptionutils.getstacktrace是apache commons lang3提供的静态方法,用于将throwable对象及其嵌套cause链转换为标准格式的字符串堆栈跟踪,一行调用即可替代手动递归处理。

ExceptionUtils.getStackTrace 是 Apache Commons Lang 提供的便捷方法,用于将 Throwable 对象(如异常)的完整堆栈跟踪转换为可读的字符串,无需手动遍历 printStackTrace 到流中。
基本用法:直接传入异常对象
只需把异常实例传给 getStackTrace(),它会返回包含所有栈帧(包括 cause 链)的字符串:
- 支持
Exception、Error及其子类 - 自动展开
getCause()链,递归打印嵌套异常 - 结果是标准格式,与
e.printStackTrace(new PrintWriter(...))输出一致
常见调用示例
例如捕获异常后快速获取字符串形式的堆栈:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
try {
int a = 1 / 0;
} catch (ArithmeticException e) {
String stackTrace = ExceptionUtils.getStackTrace(e);
System.out.println(stackTrace); // 直接打印或记录到日志
}
输出类似:
java.lang.ArithmeticException: / by zero
at com.example.Test.main(Test.java:10)
Caused by: java.lang.ArithmeticException: / by zero
at com.example.Test.main(Test.java:10)
注意点和替代方案
- 确保已引入依赖:
org.apache.commons:commons-lang3(Lang3,不是旧版 commons-lang) - 方法是静态的,无需实例化工具类
- 如果只需要“最外层”异常(不展开 cause),可用
ExceptionUtils.getStackTrace(e, false)(Lang 3.12+ 支持) - 若需控制格式(如只取前 N 行),建议配合
StringUtils.substring或正则截取
与原生方式对比
不用 getStackTrace() 时,需手动构建:
- 调用
e.getStackTrace()得到StackTraceElement[],但不包含 cause - 要完整输出,得自己递归调用
getCause()并拼接字符串,易出错且冗长 -
ExceptionUtils.getStackTrace封装了全部逻辑,一行解决
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










