Java-Log4j2 ErrorHandler未处理异常
我编写了一个定制的ErrorHandler,如果记录器无法登录到它的日志文件,它应该关闭应用程序Java-Log4j2 ErrorHandler未处理异常,java,log4j2,Java,Log4j2,我编写了一个定制的ErrorHandler,如果记录器无法登录到它的日志文件,它应该关闭应用程序 import org.apache.logging.log4j.core.ErrorHandler; public class LogFileErrorHandler extends ErrorHandler { private static final Logger LOGGER = StatusLogger.getLogger(); @Override public voi
import org.apache.logging.log4j.core.ErrorHandler;
public class LogFileErrorHandler extends ErrorHandler {
private static final Logger LOGGER = StatusLogger.getLogger();
@Override
public void error(String msg) {
LOGGER.error(msg);
System.exit(ExitCodes.IO_LOGGER_COULD_NOT_WRITE);
}
... more error implementations
}
显然,没有简单的方法可以通过编程方式使用配置添加它
因此,我编写了这段代码作为一种变通方法,将ErrorHandler添加到我的appender中。它可以工作,我可以看到ErrorHandler被添加到我的appender中
public void addErrorHandler() {
final LoggerContext context = (LoggerContext) LogManager.getContext();
for(Appender a : context.getConfiguration().getAppenders().values()) {
a.stop();
a.setHandler(new LogFileErrorHandler());
a.start();
}
}
在添加ErrorHandler之前,我必须停止appender,否则会出现异常:
一旦appender启动,就无法更改处理程序
我的问题
我做了一个测试,锁定了日志文件以产生IOException(拒绝访问)。
出于某种原因,该异常由DefaultErrorHandler处理,而不是我添加的自定义异常
为什么我的自定义ErrorHandler不能处理异常