Как мне программно сказать Logback to Reload Configuration - PullRequest
16 голосов
/ 17 февраля 2012

Я знаю, что есть операция jmx reloadDefaultConfiguration (), но без получения экземпляра MBean и вызова этой операции существует ли API обратного входа для перезагрузки конфигурации по умолчанию (при желании указывается путь к файлу конфигурации журнала)?

Ответы [ 2 ]

13 голосов
/ 16 января 2013

Я использовал для этой цели следующий код:

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);
}
13 голосов
/ 17 февраля 2012

Это исходный код 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 имеет встроенную функцию автообновления?

...