scala打印服务器消息,关于异常处理:Scala:在我的Scalatra应用程序中打印堆栈跟踪...

似乎是一个相当直截了当的问题,但我想在触发scalatra中的顶级错误处理程序时记录一个堆栈跟踪。我故意在我的一个方法中抛出一个异常,通过做一些琐碎的事情:

throw new IllegalArgumentException

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

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

}

}

错误处理程序本身是特定于scalatra的,但我确信我所寻找的答案可以通过任何普通的scala技术来解决。在这一点上我能做些什么来抓取stacktrace吗?我不确定请求是否与错误处理程序在同一线程上,否则可能会有一些答案。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))

如果使用标准记录器:com.typesafe.scalalogging.logger,该记录器将为您打印堆栈跟踪。

您可以这样使用它:

import com.typesafe.scalalogging.Logger

import org.slf4j.LoggerFactory

try {

throw new Exception("test message")

} catch {

case e:Exception => logger.error("Exception" , e)

}

已存在接受2个参数(字符串和可丢弃)的重载。

这个问题有几种方法可以将异常堆栈跟踪转换为字符串。除非提供编写器,否则将printstacktrace输出到system.err。

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值