您的位置:首页 > 编程语言 > Java开发

Java打印完整的堆栈信息

2015-10-13 15:53 525 查看

Java print full StackTrace

我们在编写一些组件时,使用的日志系统有时并不能打印完整的堆栈信息,比如slf4j,log4j,我们在调用
log.error("found error ...",e)
打印异常时,只打印一行异常信息。我们看下slf4j的源码

/**
* Log an exception (throwable) at the ERROR level with an
* accompanying message.
*
* @param msg the message accompanying the exception
* @param t   the exception (throwable) to log
*/
public void error(String msg, Throwable t);


它在打印exception时,只是打印了堆栈当中的
第一行Throwable
的信息, 而我们想要的是把整个堆栈都打印出来,这时我们会用下面方式打印堆栈信息。

e.printStackTrace()


这虽然打印了完整的堆栈信息,但它并不会把堆栈信息定向到日志文件中,这时我们就需要利用利用输出流把信息重新定到变量中,然后再送入到日志系统中

/**
* 完整的堆栈信息
*
* @param e Exception
* @return Full StackTrace
*/
public static String getStackTrace(Exception e) {
StringWriter sw = null;
PrintWriter pw = null;
try {
sw = new StringWriter();
pw = new PrintWriter(sw);
e.printStackTrace(pw);
pw.flush();
sw.flush();
} finally {
if (sw != null) {
try {
sw.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
if (pw != null) {
pw.close();
}
}
return sw.toString();
}
```

然后我们这样调用就解决了这个问题


log.error(“fount error…”, getStackTrace(e))

“`
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: