当代码出现异常时通常都需要将异常信息写入到日志中,异常信息越详细越有利于问题的排查。而通过的()方法只能获得异常的名称而不能获取哪里出现的异常,对于排错意义不大。
这里罗列几个网上查到的还不错的可以获取详细信息的方法。
//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:之所以不罗列这个方法,主要是觉得以上链接说的太详细,我没必要为了一个日志写那么一大堆代码,有点不值当)