【发布时间】:2020-06-04 15:43:23
【问题描述】:
我正在使用 Log4j2。 要求是,如果记录器无法写入日志文件(访问被拒绝、锁定等),应用程序应关闭。
我编写了以下类来实现这一点:
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
}
我正在使用此处的代码以编程方式构建我的 FileLogger:
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;
}
现在我的问题是:
我知道在 Log4j 1.X.X 版本中,向 Logger 添加错误处理程序非常容易。 你可以这样做:
logger.setErrorHandler(your error handler);
如何使用上面的代码在 Log4j2 版本 2.13.3 中执行此操作?
【问题讨论】:
-
@Coolman 这不是我需要的。如果出现故障,我需要应用程序关闭。不要更改附加程序。