zoukankan      html  css  js  c++  java
  • 得到java异常printStackTrace的详细信息

    平时写Java代码时,想看抛出的异常信息,来找出具体的异常点,我们常常会用Exception.toString ()或者 Exception.getMessage()来取得异常信息,再把它print到控制台,,但是这些信息只能告诉我们异常本身的信息,对我们找出异常点帮助并不太理想,所以我们会使用Exception.printStackTrace()方法,这样就可以在控制台输出非常详细的异常信息,甚至可以通过它跟踪到异常发生在某个类的第几行,这对我们非常有用。但是我们有时只想得到这些 StackTrace数据,通过其它方式表现出来(非控制台,如网页或GUI),这就有了这篇文章.回想一下,原来的日志工具log4、weblogic服务器、还有webshpere服务器等等好像都可以得到这些信息,所以就先直接在Exception类找找有没有直接的方法可以返回这些信息,看到getStackTrace()方法返回一个StackTraceElement对象的集合(原来怎么没注意到呢?),翻一下JDK,一看StackTraceElement类提供的方法(

     
    String getFileName() 
              Returns the name of the source file containing the execution point represented by this stack trace element.
     int getLineNumber() 
              Returns the line number of the source line containing the execution point represented by this stack trace element.
     String getMethodName() 
              Returns the name of the method containing the execution point represented by this stack trace element.
     int hashCode() 
              Returns a hash code value for this stack trace element.
     boolean isNativeMethod() 
              Returns true if the method containing the execution point represented by this stack trace element is a native method.
     String toString()

    )没错,就是他了,写段代码测试一下先:

    [java] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. public static void main(String[] args) {  
    2.   try{  
    3.    byte[] a=args[0].getBytes();  
    4.      
    5.   }catch (Exception ex){  
    6.      
    7.    ex.printStackTrace();  
    8.    StackTraceElement [] messages=ex.getStackTrace();  
    9.    int length=messages.length;  
    10.    for(int i=0;i<length;i++){  
    11.     System.out.println("ClassName:"+messages[i].getClassName());  
    12.     System.out.println("getFileName:"+messages[i].getFileName());  
    13.     System.out.println("getLineNumber:"+messages[i].getLineNumber());  
    14.     System.out.println("getMethodName:"+messages[i].getMethodName());  
    15.     System.out.println("toString:"+messages[i].toString());  
    16.     }  
    17.    }  
    18.  }  

    Ok,秘密找到了,原来就这么回事。

    下面自己写了一个得到异常详细信息的方法

    [java] view plain copy
     
     在CODE上查看代码片派生到我的代码片
      1. public String getExceptionDetail(Exception e) {  
      2.         StringBuffer stringBuffer = new StringBuffer(e.toString() + " ");  
      3.         StackTraceElement[] messages = e.getStackTrace();  
      4.         int length = messages.length;  
      5.         for (int i = 0; i < length; i++) {  
      6.             stringBuffer.append(" "+messages[i].toString()+" ");  
      7.         }  
      8.         return stringBuffer.toString();  
      9.     }  
  • 相关阅读:
    前端分布引导插件IntroJs的使用
    分步引导中,Js操作Cookie,实现判断用户是否第一次登陆网站
    android 5.0新特性CardView教程
    Android使用NumberPicker控件实现选择城市,生日
    程控交换机是什么东东!
    sip消息 响应状态码解析大全
    测试人员必看的经典书籍
    mysql创造并使用它
    linux系统备份与还原
    BNF范式(巴科斯范式)简介
  • 原文地址:https://www.cnblogs.com/vofill/p/6875216.html
Copyright © 2011-2022 走看看