按需重新加载log4j2配置

lb3vh1jj  于 2022-11-06  发布在  其他
关注(0)|答案(3)|浏览(138)

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

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

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

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

谢谢你!

2j4z5cfb

2j4z5cfb1#

看来我找到解决办法了:

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

有人认为这有什么问题/副作用吗?

j0pj023g

j0pj023g2#

目前还没有一种干净的方法来实现这一点。它可以通过反射来实现。(当然,如果实现发生变化,这可能会中断。)
更新:这是错误的。有一个干净的方法,见下面的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();
q1qsirdb

q1qsirdb3#

那么使用org.apache.logging.log4j.core.config.Configurator呢?

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

相关问题