如何将异常堆栈跟踪 (stderr) 捕获到文件中的 Scala



如何将异常堆栈跟踪捕获到 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)

最新更新