【发布时间】:2018-12-20 23:04:24
【问题描述】:
如何在 Scala 中将异常堆栈跟踪捕获到文件中?我尝试使用System.setErr,但它不起作用,而Console.withErr 只能为代码 sn-p 而不是整个应用程序设置。任何想法?
我想将应用程序的所有未捕获异常记录到一个文件中
编辑:
更多上下文:我在一个 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")
但我在标准输出和日志文件中都看不到打印
【问题讨论】:
-
所有未捕获的异常?您的意思是您想吞下所有异常并让应用继续运行吗?
-
“没有用”是什么意思?哪个异常没有被记录?是怎么扔的?您应该发布您的
System.setErr()代码。 -
我只想在应用死机之前记录堆栈跟踪。我试过的代码使用了这个
System.setErr(new PrintStream( new FileOutputStream("a.txt"))),异常只是一个测试throw new Exception("e") -
@alexpila 你的代码对我有用,我已经用一个例子编辑了我的答案。让我问一下……您是否从 println 或您的记录器框架中看到任何东西(不仅仅是在异常中)?
-
@alexlipa,你读过this吗?我尝试了各种方法来重现您的问题,但我的尝试总是按预期工作。如果没有足够的代码来重现您的问题,我们只能猜测您所看到的。