scala - 在我的Scalatra應用程序中,異常處理 Scala: 列印堆棧跟蹤

  显示原文与译文双语对照的内容
146 3

看起來是一個相當直截了當的問題,但是我想在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

在這裡列印堆棧跟蹤是什麼最好的方法,因這裡我可以以記錄並檢查它以修復錯誤代碼。

时间:原作者:0个回答

143 0

我想你想要 printStackTrace() 而不是 getStackTrace 。如果你要輸出到日誌文件,getMessage() 可能有幫助。或者你可以嘗試將整個異常對象傳遞給記錄器。

原作者:
129 4

使用來自Apache公共Lang的 ExceptionUtils插件:

import org.apache.commons.lang3.exception.ExceptionUtils
(...)
logger.info("an exception occurred:" + ExceptionUtils.getStackTrace(e))
原作者:
105 1

這個問題有幾種方法可以將異常堆棧跟蹤轉換為字元串。將printStackTrace輸出輸出到 System.err,除非你提供了編寫器。

原作者:
73 2

如果你使用標準記錄器: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參數,字元串和Throwable的重載。

原作者:
...