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

标签 java exception logging exception-handling

<分区>

有没有办法通知运行时抛出的每个异常(已处理和未处理)?

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

我读过一些关于 ExceptionListener 的内容,但它们似乎是为不同的工作而设计的。

有人知道这怎么可能吗?

最佳答案

异常通常在捕获(而不是抛出)时记录下来,因此它们的后果也可以记录下来。也就是说,有些异常没有任何后果,因此无需进行调查,而其他异常则极为严重,必须在发生时进行调查。因此,一个好的日志文件不仅应该传达发生了异常,还应该传达该异常的(业务)影响,只有在异常被捕获后才知道。这要求在处理异常时记录异常。

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

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

关于java - 获得有关每个抛出的异常(甚至已处理的异常)的通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34444767/

相关文章:

java - Android 电视盒上的设备所有者无法正常工作

c++ - 为什么在创建数组期间在 C++ 中抛出未捕获的异常时不调用析构函数?

android - 反序列化时出现 Gson 异常(无参数构造函数不存在)

logging - 如何查看哪些查询已发送到 ArangoDB 服务器

java - 我应该在 Swing GUI 中重写 frameInit 来初始化代码吗?

java - 我的 Java 记录器(比如 logback)如何找到我的代码的行号?

java - AutoCompleteTextView 自定义 ArrayAdapter 显示整个 ArrayList 而不是单独的字符串

c# - 如何在设计时避免 XAML 代码中出现 "object reference not set to an instance of an object"异常?

javascript - console.log 是如何工作的?

python - 如何设置扭曲的日志记录级别?