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
这里打印出堆栈跟踪的最佳方法是什么,以便我可以记录并查看它以修复我可怕代码中的错误?
使用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)
我认为你想要printStackTrace()而不是getStackTrace. 如果您要输出到日志文件,getMessage()可能会有所帮助。或者您可以尝试将整个异常对象传递给记录器。
| 归档时间: |
|
| 查看次数: |
14814 次 |
| 最近记录: |