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


    我们在捕捉到程序异常时,可以使用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)
  • 相关阅读:
    使用dbms_metadata.get_ddl遇到ORA-31603
    oracle得到建表语句
    Linux性能优化和监控系列(一)——top工具
    Oracle在Linux下的性能优化
    地址跳转问题
    无法对 数据库'UDS' 执行 删除,因为它正用于复制
    [.net 多线程]SpinWait
    [.net 多线程 ]ReaderWriterLock
    [.net 多线程]Barrier
    [.net 多线程]CountdownEvent
  • 原文地址:https://www.cnblogs.com/erbin/p/4372578.html
Copyright © 2020-2023  润新知