如何在Scala中将异常堆栈跟踪捕获到文件中?我尝试使用System.setErr
,但没有用,虽然Console.withErr
只能为代码段设置,而不能为整个应用程序设置。任何想法?
我想将应用程序所有未捕获的异常记录到文件中
编辑:
更多上下文:我在带有类路径中添加的jar的spark-shell中运行。我要做的是实例化一个类的对象,并且在类中运行的第一个代码如下,这并没有给我
预期印刷品
Thread.currentThread().setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
def uncaughtException(t: Thread, e: Throwable): Unit = {
logger.error("exception logged")
println("exception logged")
}
})
throw new Exception("my ex")
但是我在stdout和日志文件中都看不到打印内容
答案 0 :(得分:0)
只需使用Thread.setUncaughtExceptionHandler:
Java uncaught global exception handler
如果您的应用是单线程的,请使用Thread.currentThread()获取当前线程。
修改
object ErrorHandling {
def main(args: Array[String]): Unit = {
Thread.currentThread().setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
def uncaughtException(t: Thread, e: Throwable): Unit = {
// logger.error("exception logged")
println(s"exception logged: $e")
e.printStackTrace()
}
})
throw new Exception(s"boom")
}
}
应该给您类似的东西
exception logged: java.lang.Exception: boom
java.lang.Exception: boom
at ErrorHandling$.main(ErrorHandling.scala:10)
at ErrorHandling.main(ErrorHandling.scala)