如何将异常堆栈跟踪捕获到 Scala 中的文件中?我尝试了System.setErr
但它不起作用,而Console.withErr
只能为代码片段设置,而不能为整个应用程序设置。 知道吗?我想将应用程序的所有未捕获异常记录到一个文件中
编辑:
更多上下文:我在一个火花外壳内运行,并在类路径中添加了一个罐子。我所做的是实例化一个类的对象,并且在类中运行的第一个代码如下,这不会给我
预期打印
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")
但我在标准输出和日志文件中都没有看到打印
只需使用 Thread.setUncaughtExceptionHandler:
Java 未捕获的全局异常处理程序
如果您的应用是单线程的,请使用 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)