Как перехватить трассировку стека (stderr) в файл в Scala - PullRequest
0 голосов
/ 21 декабря 2018

Как мне записать трассировку стека исключений в файл в Scala?Я пробовал с System.setErr, но это не сработало, а Console.withErr можно установить только для фрагмента кода, а не для всего приложения.Любая идея?Я хотел бы записать в файл все неперехваченные исключения из приложения

Редактировать:

Немного больше контекста: я бегу внутри спарк-оболочки с банкой, добавленной в classpath.То, что я делаю, это создание экземпляра объекта класса, и первый код, запускаемый внутри класса, является следующим, что не дает мне
ожидаемого вывода

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, ни в файле журнала

1 Ответ

0 голосов
/ 21 декабря 2018

Просто используйте Thread.setUncaughtExceptionHandler:

Глобальный обработчик исключений Java uncaught

Используйте 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...