Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-Log4j2 ErrorHandler未处理异常_Java_Log4j2 - Fatal编程技术网

Java-Log4j2 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

我编写了一个定制的ErrorHandler,如果记录器无法登录到它的日志文件,它应该关闭应用程序

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不能处理异常