zl程序教程

您现在的位置是:首页 >  其他

当前栏目

打印全部异常堆栈、ExceptionUtils.getFullStackTrace这样最快

2023-03-14 22:50:04 时间

//打印全部异常堆栈
public class ExceptionUtils {
    public static void main(String[] args) {
        try {
            int a=1/0;
        } catch (Exception e) {
            e.printStackTrace();
            String fullStackTrace = org.apache.commons.lang.exception.ExceptionUtils.getFullStackTrace(e);
            System.out.println(fullStackTrace);
 
        }
    }
}
 /**
     * <p>A way to get the entire nested stack-trace of an throwable.</p>
     *
     * <p>The result of this method is highly dependent on the JDK version
     * and whether the exceptions override printStackTrace or not.</p>
     *
     * @param throwable  the <code>Throwable</code> to be examined
     * @return the nested stack trace, with the root cause first
     * @since 2.0
     */
    public static String getFullStackTrace(Throwable throwable) {
        StringWriter sw = new StringWriter();
        PrintWriter pw = new PrintWriter(sw, true);
        Throwable[] ts = getThrowables(throwable);
        for (int i = 0; i < ts.length; i++) {
            ts[i].printStackTrace(pw);
            if (isNestedThrowable(ts[i])) {
                break;
            }
        }
        return sw.getBuffer().toString();
    }
//另一种方式
public static String exception2String(Exception ex){
        String exceptionMessage = "";
        if (ex != null) {
            StringWriter sw = new StringWriter();
            PrintWriter pw = new PrintWriter(sw);
            try {
                ex.printStackTrace(pw);
                exceptionMessage = sw.toString();
            } finally {
                try {
                    sw.close();
                    pw.close(); 
                } catch (Exception e) {
                }
            }
        }
        return exceptionMessage;
    }