gpt4 book ai didi

java - Log4j2 - 使用编程配置的 AwaitCompletionReliabilityStrategy 的 Stackoverflow

转载 作者:行者123 更新时间:2023-12-02 11:56:50 28 4
gpt4 key购买 nike

我当前的项目需要使用 Spring 上下文中的属性来更新 log4j2 配置。为了实现这一点,我做了一个监听器,当加载 spring 上下文时(在 EnvironmentChangeEvent 上),它会重新加载 log4j2 上下文。监听器工作正常,并且第一次使用我的配置加载上下文。但是,当刷新完成时,在本例中通过/refresh 端点,应用程序会在 log4j2 的 AwaitCompletionReliabilityStrategy 中引发 Stackoverflow 错误。

错误发生在这两行:

result = next.get();
return result.getReliabilityStrategy().getActiveLoggerConfig(next);

该错误与 Spring Boot 无关,因为我已经完成了仅使用 Log4j2 类复制该错误的 junit 测试:

@Test
public void testAwaitCompletionStackOverflow() {
Logger log = LogManager.getLogger(this.getClass());
final LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
final Configuration config = ctx.getConfiguration();
PatternLayout layout = PatternLayout.createLayout(PatternLayout.SIMPLE_CONVERSION_PATTERN, null, config, null,
null,false, false, null, null);
Appender appender = FileAppender.createAppender("target/test.log", "false", "false", "File", "true",
"false", "false", "4000", layout, null, "false", null, config);
appender.start();
config.addAppender(appender);
AppenderRef ref = AppenderRef.createAppenderRef("File", null, null);
AppenderRef[] refs = new AppenderRef[] {ref};
LoggerConfig loggerConfig = LoggerConfig.createLogger("false", Level.INFO, "testlog4j2refresh",
"true", refs, null, config, null );
loggerConfig.addAppender(appender, null, null);
config.addLogger("testlog4j2refresh", loggerConfig);
ctx.stop();
ctx.start(config);

log.error("Info message");
}

我已经在 log4j2 JIRA https://issues.apache.org/jira/browse/LOG4J2-2134 上填写了一个问题但与此同时必须寻找解决此问题的解决方案或解决方法。

实际上,我的解决方案是创建一个小补丁,检查 AwaitCompletionReliabilityStrategy 中的“下一个”结果是否等于实际结果,并在这种情况下返回实际结果,但我认为在生产中部署带有补丁的微服务是不行的log4j2 库。

还有其他方法可以解决这个问题吗?或者有其他方法以编程方式加载 log4j 的配置吗?

提前致谢!

最佳答案

关于java - Log4j2 - 使用编程配置的 AwaitCompletionReliabilityStrategy 的 Stackoverflow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47547436/

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