获取Java中的所有异常并远程发送

Pet*_*zov 9 java spring aspect spring-aspects

我有一个庞大的Java应用程序。我想拦截所有Java异常并通过电子邮件发送它们。我不能在任何地方添加代码以通过发送代码,try-catch因此是否可以使用例如Aspect将异常拦截为低级类并获取异常内容?

还是有某种方法可以覆盖某些内部Java类并获取异常有效负载?

有什么可能?

bur*_*rna 7

您可以使用spring-aop@AfterThrowing建议。

@Aspect
@Component
public class MailExceptionAspect {

    @AfterThrowing(value="execution(* com.example..*.*(..))", throwing="ex" )
    public void mailAfterThrowing(Throwable ex) {
        // do something to send an email
    }
}
Run Code Online (Sandbox Code Playgroud)

这将拦截package中所有未处理的异常com.example。注意,在应用程序中处理(捕获)的异常不能被拦截。

另一个解决方案是使用应用程序的日志记录框架。许多框架,例如logback,log4j提供了可以通过电子邮件发送日志的内置配置。


小智 2

如果所有正在运行的线程都在 ht 控制中,则可以使用 Thread.UncaughtExceptionHandler 的实现来标记它们。当然,如果应用程序具有深层多线程特性,这可能会有点棘手。