按需重新加载 log4j2 配置

Reload log4j2 configuration on demand

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

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

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

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

谢谢!

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

更新:这是错误的。 是一种干净的方法,请参阅下面 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();

看来我找到了解决方案:

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

有人看到这个 wrong/side-effects 吗?

使用 org.apache.logging.log4j.core.config.Configurator 怎么样?

   LoggerContext loggerContext = LoggerContext.getContext(false);
   final Configuration configuration = loggerContext.getConfiguration();
   Configurator.reconfigure(configuration);