我是靠谱客的博主 文静诺言,最近开发中收集的这篇文章主要介绍java 打印堆栈_Java打印完整的堆栈信息,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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))

最后

以上就是文静诺言为你收集整理的java 打印堆栈_Java打印完整的堆栈信息的全部内容,希望文章能够帮你解决java 打印堆栈_Java打印完整的堆栈信息所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(46)

评论列表共有 0 条评论

立即
投稿
返回
顶部