gpt4 book ai didi

Java - 当外部类捕获异常时进行监听

转载 作者:行者123 更新时间:2023-12-01 19:56:31 25 4
gpt4 key购买 nike

有没有办法在一个单独的类中创建一个监听器,以便在项目中捕获异常时运行特定的代码段?

我的代码中有很多 try-catch,如果捕获到异常,我希望使用 log4j 查看日志。我可以相当轻松地对每个 try-catch 执行以下操作(只需花费一些时间):

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);
}

}

这可能吗?

谢谢

最佳答案

标准方式:

Thread.setDefaultUncaughtExceptionHandler( (thread, throwable) -> {
log(throwable.getMessage(), thread.getId());
});

它将处理未捕获的RuntimeException,除非另有指定,否则它将作用于所有应用程序线程。

请记住,抛出异常是有原因的,不应被忽略,尤其是 RuntimeException

<小时/>

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

Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
@Override
public void uncaughtException(final Thread t, final Throwable e) {

}
});

关于Java - 当外部类捕获异常时进行监听,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49498234/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com