`

Java中获取Exception的详细信息

    博客分类:
  • Java
阅读更多

当代码出现异常时通常都需要将异常信息写入到日志中,异常信息越详细越有利于问题的排查。而通过的Exception.getMessage()方法只能获得异常的名称而不能获取哪里出现的异常,对于排错意义不大。

 

这里罗列几个网上查到的还不错的可以获取详细信息的方法。

//1、
public String getTrace(Throwable t) {
	StringWriter stringWriter= new StringWriter();
	PrintWriter writer= new PrintWriter(stringWriter);
	t.printStackTrace(writer);
	StringBuffer buffer= stringWriter.getBuffer();
	return buffer.toString();
}

//2、
public static String getExceptionAllinformation(Exception ex){
        String sOut = "";
        StackTraceElement[] trace = ex.getStackTrace();
        for (StackTraceElement s : trace) {
            sOut += "\tat " + s + "\r\n";
        }
        return sOut;
}

//3、
public static String getExceptionAllinformation_01(Exception ex) {
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        PrintStream pout = new PrintStream(out);
        ex.printStackTrace(pout);
        String ret = new String(out.toByteArray());
        pout.close();
        try {
             out.close();
        } catch (Exception e) {
        }
        return ret;
}

//4、
private static String toString_02(Throwable e){  
         StringWriter sw = new StringWriter();  
         PrintWriter pw = new PrintWriter(sw, true);  
         e.printStackTrace(pw);  
         pw.flush();   
         sw.flush();  
         return sw.toString(); 
} 

其中方法1忘了从哪里搜刮来的了,后面三个来自于:http://blog.csdn.net/long95wang/article/details/8089489。

 

推荐使用方法3或方法4。

方法2虽说能够返回“哪里出现了异常”但是它不会报告是你什么异常,而其他三个不但告诉你出现了什么异常,还告诉你那里出现了异常。

 

方法1算是比较好用的,但是从传过来的参数来看,似乎太大了点,咱们平常开发用个Exception就差不多了没必要为了一个简单异常使用Throwable。当然啊,catch中可以catch Excetpion,然后调用Exception.getCause()获取到Throwable对象,但是拿到的Throwable通常都会空的,到Throwable.printStackTrace()时依旧会报错。这一篇(链接:http://jxyang.iteye.com/blog/1709340)有说到用反射来解决这个问题,但是我没看懂实在没整出来,所以不敢贸然的建议大家用。

 

最后,来一篇讲的更详细的获取Exception的方法:Java Exception 捕获和展示

(PS:之所以不罗列这个方法,主要是觉得以上链接说的太详细,我没必要为了一个日志写那么一大堆代码,有点不值当)

分享到:
评论

相关推荐

    Java exception_java_

    首先,我们要了解Java中的异常类型。Java的异常类都继承自`java.lang.Throwable`,主要分为两种类型:Error和Exception。Error是系统级的错误,如虚拟机错误、内存不足等,一般开发者无法处理,而Exception是应用...

    java获取数字证书信息

    这段代码首先检查请求中是否包含证书,然后获取第一个证书并打印出其主题名称和详细信息。这对于进行证书验证或基于证书的身份验证非常有用。 总之,本文介绍了如何使用Java和相关工具(如TOMCAT、JDK、OpenSSL)来...

    java获取各进程的信息

    ### Java通过Sigar库获取进程相关信息 在Java开发过程中,有时候我们需要监控系统资源或特定进程的状态,例如CPU使用率、内存占用情况等。这在服务器性能监控、问题排查等方面尤为重要。本文将详细介绍如何使用...

    java获取apk的包名版本信息

    在Java编程环境中,获取APK文件的包名和版本信息是一项常见的需求,特别是在自动化测试、应用管理或数据分析等场景中。APK是Android应用程序的安装包,它包含了应用的所有组件和资源。要从APK文件中提取这些元数据,...

    java获取天气信息

    下面将详细介绍如何在Java中获取天气信息。 首先,你需要找到一个可靠的天气API服务提供商,如OpenWeatherMap、WeatherStack、AccuWeather等。这些服务通常需要注册以获取API密钥,这将作为请求天气信息的身份验证...

    java获取linux服务器上的IP操作

    在本文中,我们将详细介绍Java获取Linux服务器上的IP操作,包括Linux服务器上的网络接口、回环接口、获取IP地址的方法等。 Linux服务器上的网络接口 在Linux服务器上,网络接口是用来发送和接受数据包的基本设备...

    Java获取系统信息(cpu,内存,硬盘,进程等)的相关方法.pdf

    Java 获取系统信息(CPU、内存、硬盘、进程等)的相关方法 Java 获取系统信息是指通过 Java 语言获取当前系统的各种信息,包括 CPU、内存、硬盘、进程等。下面将介绍两种获取系统信息的方法。 方法一:使用 Java ...

    Java获取系统CPU、内存、硬盘等系统信息

    本文将详细探讨如何利用Java获取Windows和Linux系统的CPU、内存以及硬盘信息。 首先,让我们聚焦于CPU信息的获取。在Java中,`java.lang.management`包提供了ManagementFactory类,它包含了获取系统管理信息的方法...

    Java获取文件分辨率,大小等基本信息Demo

    在Java编程语言中,获取文件的基本信息,如分辨率、大小等,是常见的文件操作任务,尤其是在处理多媒体文件,如视频时。本示例Demo提供了两种方法来实现这一目标,使用了两个不同的库:xuggle-xuggler-5.4.jar 和 ...

    JAVA获取各种路径总结

    在Java开发中,特别是在Web应用开发中,经常需要获取不同类型的路径,例如:当前Web应用的路径、特定文件的真实路径等。本文将详细讲解如何通过不同的方式来获取这些路径。 #### JSP中获取路径 1. **获取当前应用...

    java 获取客户端ip mac地址

    在Java Web开发中,有时我们需要获取客户端的IP地址甚至是MAC地址,以便进行安全验证、用户行为追踪等操作。本文将详细介绍如何通过Java来实现这一功能。 #### 一、获取客户端 IP 地址 获取客户端的IP地址通常在...

    java 获取计算机名与IP地址

    下面将详细介绍如何使用Java获取计算机名和IP地址。 首先,我们来看如何获取计算机名。计算机名通常指的是主机在网络中的标识符,可以通过`java.lang`包中的`InetAddress`类来获取。以下是一个简单的示例: ```...

    java获取MP3详细信息1

    以下是关于如何在Java中提取这些信息的详细步骤和技术。 首先,你需要一个库来处理MP3文件。Java本身并不直接支持MP3元数据的读取,但有许多第三方库可以帮助我们,如JAVE(Java Audio Video Encoder)、...

    java获取公网IP

    在Java中,我们可以创建一个类来实现这个功能。例如,`ExternalIpAddressFetcher.java` 文件可能包含以下代码: ```java import java.io.BufferedReader; import java.io.InputStreamReader; import java.net....

    java 获取当前路径

    Java 获取当前路径是 Java 编程中一个常见的需求,下面我们将讨论如何在 Java 中获取当前路径。 方法一:使用 System.getProperty() 函数 使用 System.getProperty() 函数可以获取当前路径,该函数可以获取 Java ...

    Java源码获取数据库中表的字段信息

    在提供的压缩包文件中,"说明.txt"可能包含了更详细的步骤或注意事项,而"获取数据库中表的字段信息"可能是具体的Java源代码示例,你可以结合这两个文件来更好地理解和实现这一功能。在实际开发中,这些知识将帮助你...

    Java获取随机字符串

    本文将详细介绍如何在Java中生成随机字符串,并且会结合给定的部分代码示例进行深入分析。 #### 基本原理与方法 Java提供了多种方法来生成随机字符串,主要包括使用`java.util.Random`类和`java.security....

    使用Java获取HTTP头信息

    总的来说,使用Java获取HTTP头信息涉及到网络编程基础,HTTP协议的理解,以及Java标准库或第三方库的使用。通过上述示例,你可以学习如何通过HttpURLConnection来获取HTTP头,并了解如何使用第三方库来扩展功能。在...

    JAVA得到网卡物理地址(windows和Linux)

    在 Java 中获取网卡物理地址是一项常见的需求,特别是在开发网络相关的应用程序时。网卡物理地址,也称为 MAC 地址,是一个唯一的识别码,用来标识网络设备。今天,我们将讨论如何使用 Java 获取网卡物理地址在 ...

    Java获取文件ContentType案例

    Java获取文件ContentType案例 Java获取文件ContentType案例主要介绍了Java获取文件ContentType的三种方式,具有很好的参考价值,希望对大家有所帮助。下面将详细说明每种方式的实现细节和优缺点。 方式一:使用...

Global site tag (gtag.js) - Google Analytics