我知道我可以设置我自己的UncaughtExceptionHandler
来执行未捕获异常的代码,但有没有办法让所有捕获的异常执行一些代码而不必调用该方法每一个try-catch块?
我的自定义代码向我发送一封电子邮件,其中包含未捕获异常的堆栈跟踪。我也希望该电子邮件能够捕获异常,但我不想跟踪每个try-catch
语句并添加它。
我没有寻找全局异常处理程序(我提到过UncaughtExceptionHandler),我正在寻找全局CAUGHT异常处理程序。
答案 0 :(得分:2)
您可以通过更改Exception类来记录每个Exception。这可以通过更改引导类路径,运行时代码注入或使用JVMTI来完成。
我怀疑这是一个坏主意,因为系统会捕获比您预期更多的异常。如果出现问题,你可以每秒收到数千封电子邮件。
答案 1 :(得分:0)
我建议您重新审视您的异常处理政策和策略。当发生异常时,它通常意味着出现了问题,即代码中发生异常(如意外)(数据库连接丢失,文件未找到,网络无法访问等)或代码中的错误导致意外问题(想到NPE ......)。在这些情况下,正常的程序流程无法继续。
在这种情况下,通常认为最好的做法是快速失败,除非你期待抛出一些异常并知道如何恢复,即特殊情况毕竟不是那么特殊。
如果您需要快速失败,则不需要显式处理异常,因为您的线程或程序将会死亡,您只需使用UncaughtExceptionHandler
来记录堆栈跟踪,发送电子邮件或通知等
在我看来,您可以成功恢复和恢复正常程序流程的情况不太常见,并且通常不需要通知开发人员/操作,因为它是系统正常运行的一部分(否则您不会能够处理异常)。因此,简单地记录与此场景相关的特定消息和有用数据通常就足够了,例如,“警告:恢复了瞬态错误x。状态为y和z。”。