• 得到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.     }  
  • 相关阅读:
    C# 进程 与 线程
    Micro 设计文档
    asp.net core 3.0 身份认证 替换为自已的提供程序 AuthenticationStateProvider replace to SelfAuthenticationStateProvider
    https://github.com/commonsensesoftware/More
    .net core中使用Automapper
    使用EntityFramework Core和Enums作为字符串的ASP.NET Core Razor页面——第三部分
    ABP邮件发送
    .net Core中实现SHA加密
    .net c# 文件分片/断点续传之下载--客户端
    .net core 下监控Sql的执行语句
  • 原文地址:https://www.cnblogs.com/vofill/p/6875216.html
Copyright © 2020-2023  润新知