处理Throwable与Exception以进行日志记录

时间:2018-02-08 19:14:01

标签: java exception-handling

我正在使用一个接受Exception的日志包。我有一个我自己的默认/未捕获的异常处理程序,当然必须接受Throwable。如果Throwable是Exception的一个实例,我可以直接投射并扔给记录器。但是,如果它是一个不会起作用的Throwable。目前我正在做类似以下的事情,但问题是基于Throwable的新Exception丢失了栈跟踪信息。有没有办法根据一个零售堆栈跟踪的Throwable创建一个Exception?

if (e instanceof Exception)
    logger((Exception) e); // All good, we get our stack trace logged
else
    logger(new Exception(e)); // Sadness, stack trace missing

1 个答案:

答案 0 :(得分:1)

第三方库在API中指定了Exception,但我决定发送一个Throwable来看看会发生什么(因为它似乎在内部实现它,因为Throwable会更有意义)。无论我发送Exception还是Throwable,它仍然可以正常工作。然后我将我的默认处理程序和我的中间层翻转到Throwable,并测试了一些已知的错误。还是好的。与定义的API相反的做法并不是一个巨大的粉丝,但在这种情况下,它似乎是文档错误或疏忽。如果将来的版本将行为更改为已定义,那么我可能会更聪明,并且能够解决这个问题......: - )