按需重新加载 log4j2 配置

2022-09-02 01:06:42

我的log4j2.xml配置文件设置为每30秒检查一次:

<Configuration status="WARN" monitorInterval="30">
    ...
</Configuration>

是否可以以编程方式告诉 log4j2 检查配置中的更改,而不是超时?

注意:贝我不想以编程方式加载指定配置文件的配置,我只想告诉log4j2检查之前已加载的配置文件,就好像monitorInterval过期一样。

谢谢!


答案 1

看起来我已经找到了解决方案:

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

有没有人看到任何错误/副作用?


答案 2

目前没有干净的方法来做到这一点。这可以通过反射来完成。(当然,如果实现发生变化,这可能会中断。

更新:这是错误的。一个干净的方法,请参阅下面的jamp的答案。

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

org.apache.logging.log4j.core.config.FileConfigurationMonitor mon = (org.apache.logging.log4j.core.config.FileConfigurationMonitor) ctx.getConfiguration().getConfigurationMonitor();

// use reflection to get monitor's "nextCheck" field.
// set field accessible
// set field value to zero

mon.checkConfiguration();

推荐