Java中获取Exception的详细信息

时间:2024-11-13 14:52:08

当代码出现异常时通常都需要将异常信息写入到日志中,异常信息越详细越有利于问题的排查。而通过的()方法只能获得异常的名称而不能获取哪里出现的异常,对于排错意义不大。

 

这里罗列几个网上查到的还不错的可以获取详细信息的方法。

//1、
public String getTrace(Throwable t) {
	StringWriter stringWriter= new StringWriter();
	PrintWriter writer= new PrintWriter(stringWriter);
	(writer);
	StringBuffer buffer= ();
	return ();
}

//2、
public static String getExceptionAllinformation(Exception ex){
        String sOut = "";
        StackTraceElement[] trace = ();
        for (StackTraceElement s : trace) {
            sOut += "\tat " + s + "\r\n";
        }
        return sOut;
}

//3、
public static String getExceptionAllinformation_01(Exception ex) {
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        PrintStream pout = new PrintStream(out);
        (pout);
        String ret = new String(());
        ();
        try {
             ();
        } catch (Exception e) {
        }
        return ret;
}

//4、
private static String toString_02(Throwable e){  
         StringWriter sw = new StringWriter();  
         PrintWriter pw = new PrintWriter(sw, true);  
         (pw);  
         ();   
         ();  
         return (); 
} 

其中方法1忘了从哪里搜刮来的了,后面三个来自于:/long95wang/article/details/8089489。

 

推荐使用方法3或方法4。

方法2虽说能够返回“哪里出现了异常”但是它不会报告是你什么异常,而其他三个不但告诉你出现了什么异常,还告诉你那里出现了异常。

 

方法1算是比较好用的,但是从传过来的参数来看,似乎太大了点,咱们平常开发用个Exception就差不多了没必要为了一个简单异常使用Throwable。当然啊,catch中可以catch Excetpion,然后调用()获取到Throwable对象,但是拿到的Throwable通常都会空的,到()时依旧会报错。这一篇(链接:/blog/1709340)有说到用反射来解决这个问题,但是我没看懂实在没整出来,所以不敢贸然的建议大家用。

 

最后,来一篇讲的更详细的获取Exception的方法:Java Exception 捕获和展示

(PS:之所以不罗列这个方法,主要是觉得以上链接说的太详细,我没必要为了一个日志写那么一大堆代码,有点不值当)