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