Scala: print a stack trace in my Scalatra app
似乎是一个相当直截了当的问题,但我想在触发scalatra中的顶级错误处理程序时记录一个堆栈跟踪。我故意在我的一个方法中抛出一个异常,通过做一些琐碎的事情:
在错误处理程序中,代码如下所示:
1 2 3 4 5 6 7 8 |
号
错误处理程序本身是特定于scalatra的,但我确信我所寻找的答案可以通过任何普通的scala技术来解决。在这一点上我能做些什么来抓取stacktrace吗?我不确定请求是否与错误处理程序在同一线程上,否则可能会有一些答案。
在这里打印一个堆栈跟踪的最好方法是什么,这样我就可以记录并查看它来修复我的糟糕代码中的错误?
使用apache commons lang中的exceptionutils:
1 2 3 | import org.apache.commons.lang3.exception.ExceptionUtils (...) logger.info("an exception occurred:" + ExceptionUtils.getStackTrace(e)) |
如果使用标准记录器:com.typesafe.scalalogging.logger,该记录器将为您打印堆栈跟踪。
您可以这样使用它:
1 2 3 4 5 6 7 8 |
号
已存在接受2个参数(字符串和可丢弃)的重载。
这个问题有几种方法可以将异常堆栈跟踪转换为字符串。除非提供编写器,否则将printstacktrace输出到system.err。
我认为您需要printstacktrace()而不是getstacktrace。如果要输出到日志文件,getMessage()可能会有所帮助。或者您可以尝试将整个异常对象传递给记录器。