log4j 到 log4j2 迁移的等效编程记录器初始化



我试图理解log4j2的编程方面,因为我正在迁移很多log4j 1.2代码。以下内容似乎非常不同,并且完成起来更复杂:

org.apache.log4j.Logger.getRootLogger().setLevel(Level.FATAL);
org.apache.log4j.Logger.getRootLogger().addAppender(new ConsoleAppender(new PatternLayout(PatternLayout.TTCC_CONVERSION_PATTERN), "System.err"));

具有丰富 log4j2 经验的人可以向我解释迁移上述 2 行的简单方法是什么吗?

编辑:这是我到目前为止所拥有的:

LoggerContext context = (LoggerContext) LogManager.getContext(false);
Configuration config = context.getConfiguration();
config.getLoggerConfig(LogManager.ROOT_LOGGER_NAME).setLevel(Level.FATAL);
PatternLayout patternLayout = PatternLayout.createLayout(PatternLayout.TTCC_CONVERSION_PATTERN, config, null, null, true, true, null, null);
Layout<? extends Serializable> layout = patternLayout;
ConsoleAppender consoleAppender = ConsoleAppender.createAppender(layout , null, "SYSTEM_ERR", "System.err", null, null);
consoleAppender.start();
config.addAppender(consoleAppender);
context.updateLoggers();

不可能这么复杂,对吧?

不幸的是,

创建编程配置并不是 Log4j2 的主要关注点。您可以检查其 AbstractConfiguration 类源代码第 580 行,以了解如何在内部以编程方式设置默认配置。

Log4j2 库对不同类型的配置文件(xml、json、properties、yaml)有很好的支持,或者你可以从多个源构建复合配置。此外,它还跟踪配置文件并能够动态重新加载。

我建议您评估上述功能以从代码更新配置。 例如

    final URL log4j = Resources.getResource("log4j2-test.xml");
    ConfigurationSource configurationSource = new ConfigurationSource(
            Resources.asByteSource(log4j).openStream(), log4j);
    LoggerContext context = LoggerContext.getContext(false);
    XmlConfiguration xmlConfiguration = new XmlConfiguration(context, configurationSource);
    context.start(xmlConfiguration);

似乎比具有较大配置的编程方式更容易管理。

最新更新