Ответ 1
Похоже, я нашел решение:
((org.apache.logging.log4j.core.LoggerContext) LogManager.getContext(false)).reconfigure();
Кто-нибудь видит что-то неправильное/побочные эффекты?
У меня есть файл конфигурации log4j2.xml, который нужно проверять каждые 30 секунд:
<Configuration status="WARN" monitorInterval="30">
...
</Configuration>
Возможно ли программно сообщить log4j2, чтобы проверить изменения в конфигурации, а не на время ожидания?
NB. Я не хочу программно загружать конфигурацию, задающую конфигурационный файл, просто хочу сообщить log4j2 проверить файл конфигурации, который был загружен до этого, как если бы истек monitorInterval.
Спасибо!
Похоже, я нашел решение:
((org.apache.logging.log4j.core.LoggerContext) LogManager.getContext(false)).reconfigure();
Кто-нибудь видит что-то неправильное/побочные эффекты?
В настоящее время нет чистого способа сделать это. Это можно сделать с отражением. (Конечно, это может нарушиться, если изменения вступят в силу.)
ОБНОВЛЕНИЕ: это неправильно. Существует чистый путь, см. Ниже приведенный ниже.
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();