当代码出现异常时通常都需要将异常信息写入到日志中,异常信息越详细越有利于问题的排查。而通过的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中的异常类型。Java的异常类都继承自`java.lang.Throwable`,主要分为两种类型:Error和Exception。Error是系统级的错误,如虚拟机错误、内存不足等,一般开发者无法处理,而Exception是应用...
这段代码首先检查请求中是否包含证书,然后获取第一个证书并打印出其主题名称和详细信息。这对于进行证书验证或基于证书的身份验证非常有用。 总之,本文介绍了如何使用Java和相关工具(如TOMCAT、JDK、OpenSSL)来...
### Java通过Sigar库获取进程相关信息 在Java开发过程中,有时候我们需要监控系统资源或特定进程的状态,例如CPU使用率、内存占用情况等。这在服务器性能监控、问题排查等方面尤为重要。本文将详细介绍如何使用...
在Java编程环境中,获取APK文件的包名和版本信息是一项常见的需求,特别是在自动化测试、应用管理或数据分析等场景中。APK是Android应用程序的安装包,它包含了应用的所有组件和资源。要从APK文件中提取这些元数据,...
下面将详细介绍如何在Java中获取天气信息。 首先,你需要找到一个可靠的天气API服务提供商,如OpenWeatherMap、WeatherStack、AccuWeather等。这些服务通常需要注册以获取API密钥,这将作为请求天气信息的身份验证...
在本文中,我们将详细介绍Java获取Linux服务器上的IP操作,包括Linux服务器上的网络接口、回环接口、获取IP地址的方法等。 Linux服务器上的网络接口 在Linux服务器上,网络接口是用来发送和接受数据包的基本设备...
Java 获取系统信息(CPU、内存、硬盘、进程等)的相关方法 Java 获取系统信息是指通过 Java 语言获取当前系统的各种信息,包括 CPU、内存、硬盘、进程等。下面将介绍两种获取系统信息的方法。 方法一:使用 Java ...
本文将详细探讨如何利用Java获取Windows和Linux系统的CPU、内存以及硬盘信息。 首先,让我们聚焦于CPU信息的获取。在Java中,`java.lang.management`包提供了ManagementFactory类,它包含了获取系统管理信息的方法...
在Java编程语言中,获取文件的基本信息,如分辨率、大小等,是常见的文件操作任务,尤其是在处理多媒体文件,如视频时。本示例Demo提供了两种方法来实现这一目标,使用了两个不同的库:xuggle-xuggler-5.4.jar 和 ...
在Java开发中,特别是在Web应用开发中,经常需要获取不同类型的路径,例如:当前Web应用的路径、特定文件的真实路径等。本文将详细讲解如何通过不同的方式来获取这些路径。 #### JSP中获取路径 1. **获取当前应用...
在Java Web开发中,有时我们需要获取客户端的IP地址甚至是MAC地址,以便进行安全验证、用户行为追踪等操作。本文将详细介绍如何通过Java来实现这一功能。 #### 一、获取客户端 IP 地址 获取客户端的IP地址通常在...
下面将详细介绍如何使用Java获取计算机名和IP地址。 首先,我们来看如何获取计算机名。计算机名通常指的是主机在网络中的标识符,可以通过`java.lang`包中的`InetAddress`类来获取。以下是一个简单的示例: ```...
以下是关于如何在Java中提取这些信息的详细步骤和技术。 首先,你需要一个库来处理MP3文件。Java本身并不直接支持MP3元数据的读取,但有许多第三方库可以帮助我们,如JAVE(Java Audio Video Encoder)、...
在Java中,我们可以创建一个类来实现这个功能。例如,`ExternalIpAddressFetcher.java` 文件可能包含以下代码: ```java import java.io.BufferedReader; import java.io.InputStreamReader; import java.net....
Java 获取当前路径是 Java 编程中一个常见的需求,下面我们将讨论如何在 Java 中获取当前路径。 方法一:使用 System.getProperty() 函数 使用 System.getProperty() 函数可以获取当前路径,该函数可以获取 Java ...
在提供的压缩包文件中,"说明.txt"可能包含了更详细的步骤或注意事项,而"获取数据库中表的字段信息"可能是具体的Java源代码示例,你可以结合这两个文件来更好地理解和实现这一功能。在实际开发中,这些知识将帮助你...
本文将详细介绍如何在Java中生成随机字符串,并且会结合给定的部分代码示例进行深入分析。 #### 基本原理与方法 Java提供了多种方法来生成随机字符串,主要包括使用`java.util.Random`类和`java.security....
总的来说,使用Java获取HTTP头信息涉及到网络编程基础,HTTP协议的理解,以及Java标准库或第三方库的使用。通过上述示例,你可以学习如何通过HttpURLConnection来获取HTTP头,并了解如何使用第三方库来扩展功能。在...
在 Java 中获取网卡物理地址是一项常见的需求,特别是在开发网络相关的应用程序时。网卡物理地址,也称为 MAC 地址,是一个唯一的识别码,用来标识网络设备。今天,我们将讨论如何使用 Java 获取网卡物理地址在 ...
Java获取文件ContentType案例 Java获取文件ContentType案例主要介绍了Java获取文件ContentType的三种方式,具有很好的参考价值,希望对大家有所帮助。下面将详细说明每种方式的实现细节和优缺点。 方式一:使用...