gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 12:07:24 24 4
gpt4 key购买 nike

我正在尝试了解 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 经验的人可以向我解释一下迁移上面两行的简单方法是什么吗?

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

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 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);

看起来比具有更大配置的编程方式更容易管理。

关于java - log4j 到 log4j2 迁移的等效编程记录器初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46795737/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com