How do I programmatically tell Logback to Reload Configuration

后端 未结 2 1300
离开以前
离开以前 2021-01-01 15:56

I know there\'s a reloadDefaultConfiguration() jmx operation, but without getting an instance of MBean and invoking this operation, is there a Logback api to reload the defa

相关标签:
2条回答
  • 2021-01-01 16:24

    I used the following code for this purpose:

    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);
    }
    
    0 讨论(0)
  • 2021-01-01 16:31

    This is the source code of JMXConfigurator.reloadDefaultConfiguration():

    public void reloadDefaultConfiguration() throws JoranException {
      ContextInitializer ci = new ContextInitializer(loggerContext);
      URL url = ci.findURLOfDefaultConfigurationFile(true);
      loggerContext.reset();
      ci.configureByResource(url);
    }
    

    What about just running this code wherever you need it?

    The only problem is the loggerContext variable. You can obtain it using:

    (LoggerContext)LoggerFactory.getILoggerFactory()
    

    Unfortunately it doesn't look like there is well-factored API to do this, what about raising an issue? Also are you aware that Logback has a built-in auto-refreshing feature?

    0 讨论(0)
提交回复
热议问题