Как мне программно указать Logback для перезагрузки конфигурации

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


person Yony    schedule 16.02.2012    source источник


Ответы (2)


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

person Tomasz Nurkiewicz    schedule 16.02.2012
comment
Да, думал об использовании функции автоматического обновления, но кажется немного пугающим, чтобы включить ее на чем-либо, кроме моей среды разработки. - person Yony; 18.02.2012

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

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);
}
person sasha_trn    schedule 16.01.2013
comment
Это не обрабатывает настройку журнала с использованием файла .groovy ... выдает org.xml.sax.SAXParseException - person JohnTheBeloved; 12.09.2016
comment
Крутая проблема раздражает. Я пытаюсь перезапустить свою систему во время работы и хочу перезагрузить файл groovy, так как он помещает файлы журнала в каталог с отметкой времени. - person Troy Daniels; 15.01.2020