异常——获取异常信息

当出现异常时大家都经常会想查看异常的详细信息,什么异常,异常出现在什么位置等等。

在日常的编程中,printStackTrace是一个经常被用的方法,这个方法把异常的详细信息输出到了控制台上。

但是有一些时候我们想要把这些详细的信息以其他的方式展现,网页上、日志里、报警邮件中。

Exception本身的toString,getMessage方法只是对该Exception类的本身信息,并不能帮我们找出异常点。

那么就从printStackTrace着手,将这个方法要输出的信息放到一个String里不就好了吗?

好了先看一下printStackTrace源码

 1     public void printStackTrace() {
 2         printStackTrace(System.err);
 3     }
 4
 5     public void printStackTrace(PrintStream s) {
 6         synchronized (s) {
 7             s.println(this);
 8             StackTraceElement[] trace = getOurStackTrace();
 9             for (int i=0; i < trace.length; i++)
10                 s.println("\tat " + trace[i]);
11
12             Throwable ourCause = getCause();
13             if (ourCause != null)
14                 ourCause.printStackTraceAsCause(s, trace);
15         }
16     }

结合我们看到的一般异常的输出

1 java.lang.NumberFormatException: For input string: "ss"
2     at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
3     at java.lang.Integer.parseInt(Integer.java:447)
4     at java.lang.Integer.parseInt(Integer.java:497)
5     at Main.main(Main.java:5)

我们可以先把异常本身输出即e.toString();然后再把StackTraceElement[]输出。

注意到e.getStackTrace() : StackTraceElement[] - Throwable

好了我们需要的都有了输出吧(本文重点):

1 public static String getStackTrace(Exception e) {
2     StringBuffer message = new StringBuffer();
3     StackTraceElement [] exceptionStack=e.getStackTrace();
4     message.append(e.toString());
5     for(StackTraceElement ste : exceptionStack) {
6         message.append("\n\tat " + ste);
7     }
8 }

TO BE CONTINUED……

时间: 2024-10-09 22:04:01

异常——获取异常信息的相关文章

重构获取异常栈信息--printStackTrace

MyStackTrace: /** * * @author wumingkun * @version 1.0.0 * @Description */ package com.demo.stacktrace; import java.io.PrintStream; /** * @author wumingkun * */ public class MyStackTrace { public static String getStackTrace(Throwable errors) { String

Python中获取异常(Exception)信息

异常信息的获取对于程序的调试非常重要,可以有助于快速定位有错误程序语句的位置.下面介绍几种python中获取异常信息的方法,这里获取异常(Exception)信息采用try...except...程序结构.如下所示 try: ... except Exception as e: ... 1.str(e) 返回字符串类型,只给出异常信息,不包括异常信息的类型,如1/0的异常信息 'integer division or modulo by zero' 2.repr(e) 给出较全的异常信息,包括异

java 第47节 获取异常信息

2016-06-30 1 获取异常信息 程序发生异常的时候,程序就直接从try执行到catch语句块,不再继续往下执行. package com.java1995; //结束方法 //return; //结束程序 //System.exit(0); public class TryCatchTest { public static void main(String[] args) { int count=9; try{ // int temp=count/0; // int[] arr=new

获取异常信息e.printStackTrace()的内容

获取异常信息e.printStackTrace()的内容 最近做项目的时候需要记录操作的日志,但是记录异常信息的是发现使用e.getMessage()根本无法满足需要,并且e.getMessage()有时获得的信息根本无法知道具体的错误信息,那么这个时候我们就要获得e.printStackTrace()的内容了 获得异常错误信息 package com.gavin.exception.demo; import java.io.PrintWriter; import java.io.StringW

Android 获取设备信息 异常

/**获取设备信息 * @param c * @return */ public static void setDeviceInfo(Context c,RequestParams params){ TelephonyManager tm = (TelephonyManager) c.getSystemService(Context.TELEPHONY_SERVICE); if(tm!=null){ try{ params.add("deviceId", tm.getDeviceId(

Python中获取异常(try Exception)信息

异常信息的获取对于程序的调试非常重要,可以有助于快速定位有错误程序语句的位置. 这里获取异常(Exception)信息采用try...except...程序结构.如下所示: try: ... except Exception, e: ...经典例子: import traceback print '########################################################' print "1/0 Exception Info" print '---

异常:异常的分类;获取异常及处理;抛出异常

Throwable是所有异常当然超类!该类的两个直接子类是Error和Exception. Eroor:JAVA运行时的内部错误以及资源耗尽错误,很难恢复! Exception:可以简单分为两类:1.RuntimeException:运行异常:2.非RuntimeException:由环境因素导致的: 异常的处理以及获取异常: try{ 在这里面放入可能出错的函数 }catch(Exception e){ 处理方法 }finally{ 无论是否出错都会执行此代码 } 在catch中我们一般会写E

SQL server 获取异常

一.try...... catch 获取异常信息 /*======================================== 相关错误消 息如下: ERROR_NUMBER() 返回错误号. ERROR_SEVERITY() 返回严重性. ERROR_STATE() 返回错误状态号. ERROR_PROCEDURE() 返回出现错误的存储过程或 触发器的名称. ERROR_LINE() 返回导致错误的例程中的行 号. ERROR_MESSAGE() 返回错误消息的完整文本. =====

Oracle获取异常的具体出处dbms_utility.format_error_backtrace

DBMS_UTILITY.FORMAT_ERROR_BACKTRACE :返回当前异常相应的描述,通过它就能知道异常的最初生成处.   系统为最近一次生成的异常设置了一个栈,并跟踪它的传递过程,而这个函数使用这个栈,然后返回该异常的整个传递过程.这个函数对错误的定位和实施下一步处理起着至关重要的作用. DBMS_UTILITY.FORMAT_ERROR_BACKTRACE 系统为最近一次生成的异常设置了一个栈,并跟踪它的传递过程,而这个函数使用这个栈,然后返回该异常的整个传递过程.这个函数对错误