I am working with Log4j2. The requirement is that if the logger is not able to write to the logfile (access denied, locked, etc) the application should shut down.
I've written the following class to achieve this:
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
}
I am building my FileLogger programmatically with the code here:
public static final ConfigurationBuilder<BuiltConfiguration> BUILDER = ConfigurationBuilderFactory.newConfigurationBuilder
public void initFileLoggerWithFilePattern(final String pattern) {
final LoggerComponentBuilder logger = BUILDER.newLogger("FileLogger", Level.DEBUG);
final AppenderComponentBuilder appender = createFileAppenderWithFilePattern(pattern);
BUILDER.add(appender);
logger.add(BUILDER.newAppenderRef("RollingFileAppender"));
BUILDER.add(logger);
Configurator.initialize(BUILDER.build());
}
public AppenderComponentBuilder createFileAppenderWithFilePattern(final String pattern) {
final AppenderComponentBuilder acb = BUILDER.newAppender("RollingFileAppender", "RollingFile");
acb.addAttribute("fileName", pattern);
acb.addAttribute("filePattern", pattern);
acb.addComponent(createPatternLayout());
acb.addComponent(createTimeBasedTriggeringPolicy());
return acb;
}
public LayoutComponentBuilder createPatternLayout() {
final LayoutComponentBuilder lcb = BUILDER.newLayout("PatternLayout");
lcb.addAttribute("pattern", "%d{yyyy-MM-dd HH:mm:ss.SSS}{GMT}Z %m");
return lcb;
}
public ComponentBuilder createTimeBasedTriggeringPolicy() {
final ComponentBuilder policies = BUILDER.newComponent("Policies");
final ComponentBuilder policy = BUILDER.newComponent("TimeBasedTriggeringPolicy");
policies.addComponent(policy);
return policies;
}
Now my question:
I know in Log4j 1.X.X version it was quite easy to add an error handler to a Logger. You could simply do this:
logger.setErrorHandler(your error handler);
How can I do this in Log4j2 version 2.13.3 with the code above?