按需重新加载 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);
我的 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);