平时写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() |
public static void main(String[] args) {
try{
byte[] a=args[0].getBytes();
}catch (Exception ex){
ex.printStackTrace();
StackTraceElement [] messages=ex.getStackTrace();
int length=messages.length;
for(int i=0;i<length;i++){
System.out.println("ClassName:"+messages[i].getClassName());
System.out.println("getFileName:"+messages[i].getFileName());
System.out.println("getLineNumber:"+messages[i].getLineNumber());
System.out.println("getMethodName:"+messages[i].getMethodName());
System.out.println("toString:"+messages[i].toString());
}
}
}
2.
import java.io.PrintWriter;
import java.io.StringWriter;
public class PrintWriterTest {
public static void main(String[] args) {
try{
Exception ex = new Exception("aaa");
throw ex;
}catch (Exception e) {
StringWriter sw = new StringWriter();
e.printStackTrace(new PrintWriter(sw));
System.out.println("*****="+sw.getBuffer().toString());
}
}
}