Я знаю, что есть операция reloadDefaultConfiguration() jmx, но без получения экземпляра MBean и вызова этой операции есть ли в Apache Apache перезагрузка конфигурации по умолчанию (опционально указывающая путь к файлу конфигурации журнала)?
Как программно сообщать Logback для перезагрузки конфигурации
Ответ 1
Это исходный код JMXConfigurator.reloadDefaultConfiguration()
:
public void reloadDefaultConfiguration() throws JoranException {
ContextInitializer ci = new ContextInitializer(loggerContext);
URL url = ci.findURLOfDefaultConfigurationFile(true);
loggerContext.reset();
ci.configureByResource(url);
}
Как насчет того, чтобы запускать этот код везде, где он вам нужен?
Единственная проблема - это переменная loggerContext
. Вы можете получить его, используя:
(LoggerContext)LoggerFactory.getILoggerFactory()
К сожалению, не похоже, что для этого есть хорошо продуманный API, как насчет повышения ? Также известно ли вам, что функция Logback имеет встроенную функцию автообновления?
Ответ 2
Для этой цели я использовал следующий код:
public static void reloadLogger() {
LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();
ContextInitializer ci = new ContextInitializer(loggerContext);
URL url = ci.findURLOfDefaultConfigurationFile(true);
try {
JoranConfigurator configurator = new JoranConfigurator();
configurator.setContext(loggerContext);
loggerContext.reset();
configurator.doConfigure(url);
} catch (JoranException je) {
// StatusPrinter will handle this
}
StatusPrinter.printInCaseOfErrorsOrWarnings(loggerContext);
}