scala - 如何将异常堆栈跟踪(stderr)捕获到 Scala 中的文件
问题描述
如何将异常堆栈跟踪捕获到 Scala 中的文件中?我尝试过,System.setErr
但它不起作用,而Console.withErr
只能为代码片段设置,而不是为整个应用程序设置。任何想法?我想将应用程序的所有未捕获异常记录到文件中
编辑:
更多上下文:我在一个 spark-shell 中运行,并在类路径中添加了一个 jar。我所做的是实例化一个类的对象,并且在该类中运行的第一个代码如下,它没有给我
预期的打印
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:
如果您的应用是单线程的,请使用 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)
推荐阅读
- php - 无法在共享主机上上传大文件?
- javascript - 可枚举函数特别是 JavaScript 中的 .reduce() 函数
- scala - 如何堆叠两列进行分组?
- keras - 如何在 Keras 中为 Conv2D 设置 3D 过滤器?
- php - 为什么我在 codeigniter 中上传时看到错误消息?
- json - Issues while trying to form regex of Json string
- ibm-midrange - 将系列直接连接到大型机 (NDM) 设置
- react-native - 在两个不相关的组件之间进行通信
- bash - Grep not parsing the whole file
- cmake - How do I specify the files I want CPack to pack into an RPM?