日志记录异常堆栈详细信息
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) 方式二,程序异常,异常信息为:
相关文章推荐
- python日志记录完整的异常信息traceback stack
- 如何记录异常的 堆栈信息
- java 一个日志记录异常信息的小工具
- Spring MVC异常统一处理(异常信息的国际化,日志记录)
- Windows Phone 实用开发技巧(22):使用日志记录当前信息与异常信息 推荐
- [Python]记录详细调用堆栈的日志
- Struts2 异常处理 ( jsp记录异常信息到日志 )
- 打印java异常堆栈信息到日志文件
- Asp.Net : 捕捉和记录网站中出现的所有未处理错误,抛出详细的页面来源和访问ip,调用的接口方法及异常实例(记事本日志,系统日志及数据库日志)
- StackTrace堆栈跟踪记录详细日志
- 使用StackTrace堆栈跟踪记录详细日志(可获取行号)
- 日志如何打印异常堆栈信息。
- 在程序异常中记录堆栈信息
- Windows Phone 实用开发技巧(22):使用日志记录当前信息与异常信息
- java的异常(Exception)信息的详细记录
- 在记录异常日志的时候包含源代码文件名和行号等信息
- Python记录详细调用堆栈日志的方法
- java的异常(Exception)信息的详细记录
- 程序异常时通过dump文件记录下异常的详细信息