重构获取异常栈信息--printStackTrace
2014-08-08 20:34
302 查看
MyStackTrace:
StackTraceTest:
/** * * @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 )) { 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); } } }
相关文章推荐
- 怎么获得异常的详细信息 printStackTrace
- JAVA Catch中异常信息的输出 System.out.println(e) e.printStackTrace()
- printStackTrace()方法的意思是:在命令行打印异常信息在程序中出错的位置及原因
- 使用e.printStackTrace(PrintWriter s)对异常信息处理
- 得到java异常printStackTrace的详细信息
- 得到java异常printStackTrace的详细信息
- java 获取e.printStackTrace() 的具体信息,赋值给String 变量 并返回
- 得到java异常printStackTrace的详细信息
- java代码将e.printStackTrace()写入log4j文件异常信息
- 得到java异常printStackTrace的详细信息
- 引用 Log4j记录printStackTrace()信息
- 如何获取e.printStackTrace()的内容
- 将printStackTrace()的信息以字符串形式保存
- 如何获取e.printStackTrace()的内容
- 把e.printStackTrace的堆栈信息打印在log.error()中
- 如何获取e.printStackTrace()的内容
- 将printStackTrace信息转换为字符串。
- 怎样把e.printStackTrace()这个异常保存到一个字符串变量中如:String str;
- Java异常的栈轨迹fillInStackTrace和printStackTrace的用法
- Java高级--Java线程运行栈信息的获取 getStackTrace()