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
的信息, 而我们想要的是把整个堆栈都打印出来,这时我们会用下面方式打印堆栈信息。
demo
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 Quartz定时器任务与Spring task定时的几种实现方法
本篇文章主要介绍了java Quartz定时器任务与Spring task定时的几种实现方法的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。2017-02-02Spring boot中filter类不能注入@Autowired变量问题
这篇文章主要介绍了Spring boot中filter类不能注入@Autowired变量问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-09-09Mybatis中TypeAliasRegistry的作用及使用方法
Mybatis中的TypeAliasRegistry是一个类型别名注册表,它的作用是为Java类型建立别名,使得在Mybatis配置文件中可以使用别名来代替完整的Java类型名。使用TypeAliasRegistry可以简化Mybatis配置文件的编写,提高配置文件的可读性和可维护性2023-05-05
最新评论