有没有办法在一个单独的类中创建一个监听器,以便在项目中捕获异常时运行特定的代码段?
我的代码中有很多 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);
}
}
这可能吗?
谢谢
最佳答案
标准java方式:
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/