宝塔服务器面板,一键全能部署及管理,送你10850元礼包,点我领取

我们在捕捉到程序异常时,可以使用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("
	at " + 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)