获得有关每个抛出异常(甚至是已处理的异常)的通知

时间:2015-12-23 22:35:11

标签: java exception logging exception-handling

有没有办法获得有关运行时(处理和未处理)期间抛出的每个异常的通知?

我想要的是一个记录器机制,它记录程序运行时出现的每个异常。我不想用这个记录器来处理异常,我只是希望能够记录抛出异常的事件。
问题是我想要包含所有系统异常,因此每当我抛出一个新异常时都无法调用函数...

我已经阅读了有关ExceptionListener的内容,但它们似乎是针对不同的工作。

有人知道如何做到这一点吗?

1 个答案:

答案 0 :(得分:2)

异常通常在捕获(而不是抛出)时记录,因此也可以记录其后果。也就是说,一些例外没有后果,因此不需要调查,而其他例外非常关键,必须在它们发生时进行调查。因此,良好的日志文件不仅应该传达异常,而且还要传达该异常的(业务)影响,这种异常只有在捕获到异常后才会知道。这要求在处理异常时记录异常。

因此,没有Java API可以拦截正在运行的程序抛出的所有异常。

但是,它有时可以帮助查看所有抛出的异常。您可以通过将调试器附加到JVM来实现,并为java.lang.Throwable的所有子类设置“异常断点”。或者,您可以编写一个拦截器来记录跨越某个API边界的所有异常(任何合理的依赖注入容器都可以帮助它)。或者您可以使用Instrumentation API在加载类时添加日志记录。