【问题标题】:Equivalent programmatic logger initialization for log4j to log4j2 migrationlog4j 到 log4j2 迁移的等效编程记录器初始化
【发布时间】:2017-10-17 17:19:53
【问题描述】:

我正在尝试了解 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();

不可能这么复杂吧?

【问题讨论】:

    标签: java logging log4j log4j2


    【解决方案1】:

    不幸的是,创建编程配置并不是 Log4j2 的主要关注点。您可以查看他们的AbstractConfiguration class sources 第 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);
    

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

    【讨论】:

    • 我认为这是真正的答案。甚至他们的网站上也缺少程序示例的文档,所以我认为这必须是正确的答案。谢谢!
    • 我尝试使用 2.2。 2.10 中的程序化配置选项要好得多。
    • 你检查过 2.10 的发布日期吗?它是在我们谈话后一个月发布的。
    • 是的,这就是我回来回应的原因,哈哈。尽管对编程 API 的升级是渐进式的。
    猜你喜欢
    • 2020-12-08
    • 1970-01-01
    • 2018-05-08
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 2017-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多