2012-02-16 18 views

Respuesta

11

Este es el código fuente de JMXConfigurator.reloadDefaultConfiguration():

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

¿Qué pasa con solo ejecutar este código siempre que lo necesite?

El único problema es la variable loggerContext. Puede obtenerlo usando:

(LoggerContext)LoggerFactory.getILoggerFactory() 

Por desgracia, no se ve como hay API bien factorizada de hacer esto, ¿qué pasa levantando una issue? Además, ¿sabe que Logback tiene una función integrada de refresco automático?

+1

Sí, pensado en utilizar la función de auto-refrescante, pero las costuras un poco de miedo a activarlo en otra cosa que no sea mi entorno de desarrollo – Yony

12

He utilizado el siguiente código para este propósito:

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

Esto no maneja configurando logback usando un archivo .groovy ... throws 'org.xml.sax.SAXParseException' – JohnTheBeloved

Cuestiones relacionadas