Scala:在我的Scalatra应用程序中打印堆栈跟踪

ran*_*its 11 scala exception-handling scalatra

看起来像是一个相当直接的问题,但是当我触发Scalatra中的顶级错误处理程序时,我想记录堆栈跟踪.我故意在我的一个方法中抛出异常做一些简单的事情:

throw new IllegalArgumentException
Run Code Online (Sandbox Code Playgroud)

在错误处理程序中,代码如下所示:

 error {
  case e => {
    val logger = LoggerFactory.getLogger(getClass)
    logger.info("an exception occurred: " + e.getStackTrace())
    logger.info("the request body is: " + request)
    NotFound("An error occurred, please contact support")
  }
}
Run Code Online (Sandbox Code Playgroud)

错误处理程序本身是Scalatra特定的,但我很确定我正在寻找的答案可以使用任何vanilla Scala技术来解决.在这一点上我能做些什么来抓住堆栈跟踪?我不确定请求是否与错误处理程序在同一个线程上,否则可能会有一些答案.e.getStackTrace()给我[Ljava.lang.StackTraceElement;@1f6b6954

这里打印出堆栈跟踪的最佳方法是什么,以便我可以记录并查看它以修复我可怕代码中的错误?

Fer*_*eia 6

使用Apache Commons Lang的ExceptionUtils:

import org.apache.commons.lang3.exception.ExceptionUtils
(...)
logger.info("an exception occurred: " + ExceptionUtils.getStackTrace(e))
Run Code Online (Sandbox Code Playgroud)


Jam*_*dam 5

我认为你想要printStackTrace()而不是getStackTrace. 如果您要输出到日志文件,getMessage()可能会有所帮助。或者您可以尝试将整个异常对象传递给记录器。