首页 > 其他 > 详细

怎么获得异常的详细信息 printStackTrace

时间:2015-03-27 19:50:15      阅读:178      评论:0      收藏:0      [点我收藏+]

我们在捕捉到程序异常时,可以使用e.printStackTrace();来输出详细的信息来分析异常。

但是很多时候我们不只是在终端查看,我们会希望将异常的详细信息得到,然后再做一些展示

比如写到日志文件中,在jsp页面中展示等。

那么我们怎么才能获得和e.printStackTrace();这种详细的信息呢。

当然一般的e.getMessage();是不能令我们满意的。下面记录一个比较好的方式

其实就是利用StackTraceElement [] exceptionStack=e.getStackTrace();

每一个StackTraceElement都代表着一条异常的堆栈信息(就这样描述吧→_→)

 1 package hello;
 2 
 3 public class HelloBB {
 4     
 5     public static void main(String[] args) {
 6         String message = null; // 用来接收异常信息
 7         try {
 8             System.out.println(Integer.parseInt("s"));
 9         } catch (NumberFormatException e) {
10             message = getStackTrace(e); // 调用自定义的方法获取异常信息
11             e.printStackTrace(); 
12         }
13         try {
14             Thread.sleep(1000L); // 等待一段时间,防止两次输出交错,效果演示需要,可忽略
15         } catch (InterruptedException e) {
16             e.printStackTrace();
17         }
18         System.out.println(message); // 自定义的方法获得的异常
19     }
20     
21     /**
22      * 
23      * @param e
24      * @return
25      */
26     public static String getStackTrace(Exception e) {
27         StringBuffer message = new StringBuffer();
28         StackTraceElement [] exceptionStack=e.getStackTrace();
29         message.append(e.toString()); // java.lang.NumberFormatException: For input string: "s"
30         for(StackTraceElement ste : exceptionStack) {
31             message.append("\n\tat " + ste); // at ***.***.**(**)
32         }
33         return message.toString();
34     }
35     
36 }
java.lang.NumberFormatException: For input string: "s"
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
    at java.lang.Integer.parseInt(Integer.java:447)
    at java.lang.Integer.parseInt(Integer.java:497)
    at hello.HelloBB.main(HelloBB.java:8)
java.lang.NumberFormatException: For input string: "s"
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
    at java.lang.Integer.parseInt(Integer.java:447)
    at java.lang.Integer.parseInt(Integer.java:497)
    at hello.HelloBB.main(HelloBB.java:8)

 

怎么获得异常的详细信息 printStackTrace

原文:http://www.cnblogs.com/erbin/p/4372578.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!