Перезагрузка конфигурации log4j2 по требованию

У меня есть файл конфигурации log4j2.xml, который нужно проверять каждые 30 секунд:

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

Возможно ли программно сообщить log4j2, чтобы проверить изменения в конфигурации, а не на время ожидания?

NB. Я не хочу программно загружать конфигурацию, задающую конфигурационный файл, просто хочу сообщить log4j2 проверить файл конфигурации, который был загружен до этого, как если бы истек monitorInterval.

Спасибо!

Ответ 1

Похоже, я нашел решение:

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

Кто-нибудь видит что-то неправильное/побочные эффекты?

Ответ 2

В настоящее время нет чистого способа сделать это. Это можно сделать с отражением. (Конечно, это может нарушиться, если изменения вступят в силу.)

ОБНОВЛЕНИЕ: это неправильно. Существует чистый путь, см. Ниже приведенный ниже.

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 "nextCheck" field.
// set field accessible
// set field value to zero

mon.checkConfiguration();