首页 > 代码库 > 重构获取异常栈信息--printStackTrace
重构获取异常栈信息--printStackTrace
MyStackTrace:
/** * * @author wumingkun * @version 1.0.0 * @Description */ package com.demo.stacktrace; import java.io.PrintStream; /** * @author wumingkun * */ public class MyStackTrace { public static String getStackTrace(Throwable errors) { StringBuffer result = new StringBuffer(); result.append(errors); StackTraceElement[] trace = errors.getStackTrace(); for (int i = 0; i < trace.length; i++) result.append("\n\tat " + trace[i]); Throwable ourCause = errors.getCause(); if (ourCause != null) result.append(getStackTraceAsCause(ourCause, trace)); return result.toString(); } private static String getStackTraceAsCause( Throwable ourCause,StackTraceElement[] causedTrace) { StringBuffer result=new StringBuffer(); StackTraceElement[] trace = ourCause.getStackTrace(); int m = trace.length - 1, n = causedTrace.length - 1; while (m >= 0 && n >= 0 && trace[m].equals(causedTrace[n])) { m--; n--; } int framesInCommon = trace.length - 1 - m; result.append("\nCaused by: " + ourCause); for (int i = 0; i <= m; i++) result.append("\n\tat " + trace[i]); if (framesInCommon != 0) result.append("\n\t... " + framesInCommon + " more"); Throwable tempCause = ourCause.getCause(); if (tempCause != null) result.append(getStackTraceAsCause(tempCause, trace)); return result.toString(); } }
StackTraceTest:
/** * * @author wumingkun * @version 1.0.0 * @Description */ package com.demo.stacktrace; /** * @author wumingkun * */ public class StackTraceTest { /** * @param args */ public static void main(String[] args) { try { m1(); } catch (Exception e) { System.out.println(MyStackTrace.getStackTrace(e));//直接返回异常栈信息字符串 } } /** * */ private static void m1() { StringBuffer sb=null; try { sb.append("aa"); } catch (Exception e) { throw new RuntimeException(e); } } }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。