LOG4J1.x到LOG4J2

时间:2015-10-05 09:26:51

标签: java-ee-6 log4j2

我想检查下面的一段代码,我将从LOG4J1.X迁移到LOG4J2。

File f = new File(fullFilePath);
Enumeration apps = logger.getAllAppenders();
if(!f.exists() || !apps.hasMoreElements())
{
logger.removeAllAppenders();
appender = new FileAppender();
appender.setName(fileName);
logger.addAppender(appender);
logger.setLevel(Level.toLevel(level));
}

我可以将其余代码成功转换为log4j2,但 removeAllAppenders getAllAppenders addAppender setLevel 函数在log4j2下不可用。因此,我该如何更换它们?

1 个答案:

答案 0 :(得分:1)

在Log4j2中,记录器没有直接连接到Appender或过滤器。相反,它们与LoggerConfig相关联。 LoggerConfig确实有一个setLevel方法,但更新它实际上不会修改使用它的任何Logger的级别。为此,您必须调用LoggerContext的updateLoggers方法。

LoggerContext loggerContext = (LoggerContext) LogManager.getContext(false);
Configuration config = loggerContext.getConfiguration();
// Note that the next method gets the LoggerConfig that best matches the
// Logger name. If no logger 
LoggerConfig loggerConfig = config.getLoggerConfig(loggerName);
Configurator.setLevel(loggerConfig, newLevel);
loggerContext.updateLoggers();

就Appender而言,Appender并不直接连接到LoggerConfig。相反,它们被AppenderControl包装。您可以通过调用getAppenderRefs来获取附加到LoggerConfig的Appender列表。然后,您可以逐个删除每个appender。

但是,不建议这样做。添加和删​​除像这样的Appender实际上只支持Log4j的单元测试。问题是,当您执行此操作时,系统仍在进行日志记录,并且您将最终处于日志事件丢失的状态,因为未配置任何appender。 Log4j中推荐的方法是创建一个新配置,然后执行

Configurator.initialize(Configuration);