Java log4j2未从MDC获取Syslog Appender的新值

Java log4j2未从MDC获取Syslog Appender的新值,java,spring-boot,logging,log4j2,Java,Spring Boot,Logging,Log4j2,我使用以下方法配置了log4j2: <Routing name="RoutingRemote"> <Routes pattern="$${ctx:syslogAdded}"> <Route key="true"> <Syslog name="syslog-${ctx:host}" format="${ctx:log

我使用以下方法配置了log4j2:


<Routing name="RoutingRemote">
    <Routes pattern="$${ctx:syslogAdded}">
        <Route key="true">
             <Syslog name="syslog-${ctx:host}" format="${ctx:logFormat}" 
              host="${ctx:host}" port="${ctx:port}"
              protocol="${ctx:protocol}" appName="appname" 
              mdcId="mdc-id"  />
        </Route>

    </Routes>
</Routing>

我可以在后端选择更新Syslog服务器的详细信息,比如IP、端口、日志格式、协议

我面临的问题是,当我为Syslog添加值时,log4j2始终保留我第一次输入的初始值,并将日志推送到我第一次输入的Syslog服务器。 我使用调试检查了新值是否被放入MDC中,但没有反映到log4j2中。 同样的设置也适用于logback,但现在我需要使用log4j2。
这里会出现什么问题?

MDC
用于以线程方式存储信息并在日志消息中打印该信息

但是,在这里,您使用
MDC
进行appender初始化,这不是一种好的推荐方法

在正常情况下,appender在应用程序启动期间初始化。因此,在本例中,appender也在应用程序的开始处初始化,然后使用
MDC
输入一些值,因此如果要使用这些值,必须重新初始化log4j2配置

将值放入
MDC
后,在代码行下方添加以重新初始化log4j-

((org.apache.logging.log4j.core.LoggerContext) LogManager.getContext(false)).reconfigure();

嗨,谢谢你的回答。我已经尝试过这种方法,但是在这种情况下,我在第一次之后没有得到任何日志。我的用例是,在每个新请求上,我必须从某个对象读取值并决定Syslog的属性。但是,Appender不用于此目的。Appender是一种静态的,您只需定义一次,然后在应用程序生命周期中永远使用它们,最好在log4j配置文件中定义所有syslog Appender及其实际配置,然后使用路由条件在特定syslog Appender中路由日志消息。该用例使用户将提供syslog server的详细信息,用户可以随时更改这些详细信息。同一用例,我们已经使用logback实现了,并且运行良好。现在出于某些原因,我们需要使用log4j2并实现相同的用例。