Java中获取Exception的详细信息

wuchangjian2021-11-16 13:37:02编程学习

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

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

//1
public String getTrace(Throwable t) {
	StringWriter stringWriter= new StringWriter();
	PrintWriter writer= new PrintWriter(stringWriter);
	t.printStackTrace(writer);
	StringBuffer buffer= stringWriter.getBuffer();
	return buffer.toString();
}
 
//2 这个不会返回那个异常的类
public static String getExceptionAllinformation(Exception ex){
        String sOut = "";
        StackTraceElement[] trace = ex.getStackTrace();
        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);
        ex.printStackTrace(pout);
        String ret = new String(out.toByteArray());
        pout.close();
        try {
             out.close();
        } catch (Exception e) {
        }
        return ret;
}
 
//4
private static String toString_02(Throwable e){  
         StringWriter sw = new StringWriter();  
         PrintWriter pw = new PrintWriter(sw, true);  
         e.printStackTrace(pw);  
         pw.flush();   
         sw.flush();  
         return sw.toString(); 
} 

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

推荐使用方法3。

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

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

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

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

相关文章

“悦享缤纷,绽放星城”五矿长沙·Live全新启幕

“悦享缤纷,绽放星城”五矿长沙·Live全新启幕

2022-08-07 22:17:462022年8月7日,五矿地产倾力打造的长沙文体娱商业综合体——五矿长沙·Live美好亮相。五矿地产商业地产事业部总经理、长沙五矿商业管理有限公司执行董事赵强、五矿...

GIS实战应用案例100篇(三)-基于NDVI指数的绿地信息提取

GIS实战应用案例100篇(三)-基于NDVI指数的绿地信息提取

NDVI的计算 (1) 打开预处理后的影像 (2) band math工具...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。