您的位置:首页 > 其它

日志记录异常堆栈详细信息

2017-05-14 10:54 393 查看

一、背景

在记录日志时,使用
e.getMessage()
获取异常信息时,经常会得到异常信息为null的情形,这对问题定位不仅起不到辅助作用,还会对问题排查造成困扰。如果能找到一种记录异常信息堆栈的方式,把
e.printStackTrace()
信息都打印出来,在问题定位时就比较方便了。通过本文介绍的方式,即可实现记录异常堆栈的详细信息。

本文中方法适合不支持Apache log4j打印日志开发平台。

二、详细代码

public class jdkTest {
private static Logger log = Logger.getLogger(jdkTest.class);

static String eDetail = "";
static String eMsg = "";
public static void main(String[] args) throws Exception {
try{
throw new Exception("");
}catch(Exception e){
//打印控制台堆栈信息,做为对比
log.error("e.printStackTrace()控制台异常堆栈信息:");
e.printStackTrace();
//method 1
eDetail = collectExceptionStackMsg(e);
//methon 2
eMsg = e.getMessage();
}
log.error("方式一,程序异常,详细堆栈信息为:\r\n" + eDetail);
log.error("方式二,程序异常,异常信息为:" + eMsg);
}

/**
* 收集异常堆栈信息
* */
public static String collectExceptionStackMsg(Exception e){
StringWriter sw = new StringWriter();
e.printStackTrace(new PrintWriter(sw, true));
String strs = sw.toString();
return strs;
}
}


三、运行结果

[ERROR] 2017-05-14 11:03:10 [main] (jdkTest.java:36) e.printStackTrace()控制台异常堆栈信息:
java.lang.Exception:
at test.jdkTest.main(jdkTest.java:33)

[ERROR] 2017-05-14 11:03:10 [main] (jdkTest.java:43) 方式一,程序异常,详细堆栈信息为:
java.lang.Exception:
at test.jdkTest.main(jdkTest.java:33)

[ERROR] 2017-05-14 11:03:10 [main] (jdkTest.java:44) 方式二,程序异常,异常信息为:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  异常