重构获取异常栈信息--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);
		}
	}

}

重构获取异常栈信息--printStackTrace,布布扣,bubuko.com

时间: 2024-12-09 08:52:33

重构获取异常栈信息--printStackTrace的相关文章

获取当前栈信息

[获取当前栈信息] System.Diagnostics.StackFrame代表一层栈的信息,System.Diagnostics.StackTrace是Frame集合,代表整个栈的信息.0是层次最深的一层.在LOG时,栈信息非常有用. 参考: 1.http://msdn.microsoft.com/zh-cn/library/system.diagnostics.stackframe(v=vs.110).aspx 2.http://msdn.microsoft.com/zh-cn/libra

Java获取异常堆栈信息

public String getExceptionStack(Exception e){ StackTraceElement[] stackTraceElements = e.getStackTrace(); String prefix = "Exception in thread "+"\""+Thread.currentThread().getName()+"\" "; String result = prefix+e.

获取异常信息e.printStackTrace()的内容

获取异常信息e.printStackTrace()的内容 最近做项目的时候需要记录操作的日志,但是记录异常信息的是发现使用e.getMessage()根本无法满足需要,并且e.getMessage()有时获得的信息根本无法知道具体的错误信息,那么这个时候我们就要获得e.printStackTrace()的内容了 获得异常错误信息 package com.gavin.exception.demo; import java.io.PrintWriter; import java.io.StringW

Python中获取异常(Exception)信息

异常信息的获取对于程序的调试非常重要,可以有助于快速定位有错误程序语句的位置.下面介绍几种python中获取异常信息的方法,这里获取异常(Exception)信息采用try...except...程序结构.如下所示 try: ... except Exception as e: ... 1.str(e) 返回字符串类型,只给出异常信息,不包括异常信息的类型,如1/0的异常信息 'integer division or modulo by zero' 2.repr(e) 给出较全的异常信息,包括异

java 第47节 获取异常信息

2016-06-30 1 获取异常信息 程序发生异常的时候,程序就直接从try执行到catch语句块,不再继续往下执行. package com.java1995; //结束方法 //return; //结束程序 //System.exit(0); public class TryCatchTest { public static void main(String[] args) { int count=9; try{ // int temp=count/0; // int[] arr=new

Python中获取异常(try Exception)信息

异常信息的获取对于程序的调试非常重要,可以有助于快速定位有错误程序语句的位置. 这里获取异常(Exception)信息采用try...except...程序结构.如下所示: try: ... except Exception, e: ...经典例子: import traceback print '########################################################' print "1/0 Exception Info" print '---

异常堆栈信息输出工具类

public class MyExceptionUtils { /** * 输入异常的堆栈信息 * @param aThrowable * @return */ public static String getStackTrace(Throwable e) { final Writer result = new StringWriter(); final PrintWriter printWriter = new PrintWriter(result); e.printStackTrace(pr

异常:异常的分类;获取异常及处理;抛出异常

Throwable是所有异常当然超类!该类的两个直接子类是Error和Exception. Eroor:JAVA运行时的内部错误以及资源耗尽错误,很难恢复! Exception:可以简单分为两类:1.RuntimeException:运行异常:2.非RuntimeException:由环境因素导致的: 异常的处理以及获取异常: try{ 在这里面放入可能出错的函数 }catch(Exception e){ 处理方法 }finally{ 无论是否出错都会执行此代码 } 在catch中我们一般会写E

Android 获取运营商信息(完整版)-解决高通,MTK等双卡问题

由于国内的运营商问题,双卡手机获取IMSI号问题要根据厂商API 来实现. 下面我们就来做一套完整的分析运营商获取IMSI号逻辑. 1,首先我们要判断手机的平台. 1.1,判断手机是否MTK平台 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 public static M