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

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

时间: 原作者:

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的重載。

...