Java - 在外部类中捕获异常时侦听

时间:2018-03-26 18:26:54

标签: java exception logging exception-handling log4

有没有办法在单独的类中创建一个侦听器,只要在项目中捕获到异常,就会运行某段代码?

我的代码中有很多try-catches,如果发现异常,我希望使用log4j查看日志。我可以很容易地为每一次尝试捕捉做以下事情(只需要一些时间):

private static final Logger logger = LogManager.getLogger(Example.class);

public void testMethod() {
    try {
        // some code here that could throw an exception
    } catch(Exception e) {
        logger.error("Unexpected error has occurred: ", e);
    }
}

这将使用log4j记录异常。但是,我需要这样做超过50次,而且它是多余的,我宁愿能够使用1种方法来做到这一点。那么,有没有办法做这样的事情呢?

public class ListenerClass {

    private static final Logger logger = LogManager.getLogger(ListenerClass.class);

    // This method will be listening for exceptions to be caught within the project
    /**
     * @param e - The exception that was just caught
    */
    public void listenerMethod(ExceptionCaught e) {
        logger.error("An exception has been thrown: ", e);
    }

}

这可能吗?

由于

2 个答案:

答案 0 :(得分:2)

标准方式:

Length

将处理未被捕获的array,除非另有说明,否则它将适用于所有应用程序线程。

请记住,出于某种原因会抛出异常,不应忽略,尤其是Thread.setDefaultUncaughtExceptionHandler( (thread, throwable) -> { log(throwable.getMessage(), thread.getId()); }); s。

如果您使用的是RuntimeException的旧版本(8之前),则必须显式实例化匿名类:

RuntimeException

答案 1 :(得分:1)

查看Thread.setDefaultUncaughtExceptionHandler()