/**
* 将异常对象转为字符串。
*
* @param ex 异常信息
* @return 字符串
*/
public static String exceptionToString(Throwable ex) {
//获取指定Throwable对象中最底层的Throwable
Throwable lowerThrowable = getLowerThrowable(ex);
//获取异常堆栈信息。
StringBuilder sb = new StringBuilder(81920);
exceptionToString(ex, lowerThrowable, sb);
return sb.toString();
}
/**
* 将异常对象转为字符串。
*
* @param ex 异常信息
* @return 字符串
*/
private static void exceptionToString(Throwable ex, Throwable lowerThrowable, StringBuilder sb) {
sb.append(ex.toString());
sb.append(SystemCharUtils.getNewLine());
if (ex.equals(lowerThrowable)) {
for (StackTraceElement el : ex.getStackTrace()) {
sb.append(el.toString());
sb.append(SystemCharUtils.getNewLine());
}
}
if (null != ex.getCause()) {
exceptionToString(ex.getCause(), lowerThrowable, sb);
}
}
/**
* 获取指定Throwable对象中最底层的Throwable。
*
* @param e Throwable对象
* @return 最底层的Throwable
*/
public static Throwable getLowerThrowable(Throwable e) {
if (null == e.getCause()) {
return e;
}
return getLowerThrowable(e.getCause());
}