2011-03-27 16 views
25

estamos utilizando LogBack con nuestro proyecto, quiero configurar el registrador según algunos valores de base de datos, es decir, si algún valor de base de datos se establece en verdadero, entonces el registrador debe usar tanto archivos como agregados de base de datos. DB appender,SLF4J - Logback: ¿cómo configurar los registradores en tiempo de ejecución?

también quiero preservar el uso de registradores static final, así que no voy a crear una nueva instancia de cada registrador de tiempo se llama,

así ¿Cómo podría hacer algo como esto?

Saludos,

Respuesta

18

Debe configurar Logback mediante programación como se describe en this example.

public class Main { 

    public static void main(String[] args) { 
    Logger logger = (Logger) LoggerFactory.getLogger("abc.xyz"); 

    LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory(); 
    FileAppender<LoggingEvent> fileAppender = 
         (FileAppender<LoggingEvent>) logger.getAppender("file"); 
    if(fileAppender != null) { 
     fileAppender.stop(); 
     fileAppender.setFile("new.log"); 
     PatternLayout pl = new PatternLayout(); 
     pl.setPattern("%d %5p %t [%c:%L] %m%n)"); 
     pl.setContext(lc); 
     pl.start(); 
     fileAppender.setLayout(pl); 
     fileAppender.setContext(lc); 
     fileAppender.start(); 
    } 
    ... etc  
    } 
} 
+0

Esa es la forma más conveniente he encontrado hasta ahora, y que está funcionando para mí, Muchas gracias –

+0

Esto es lo que solía hacer con logback 1.0.6, 1.1.7, pero en el que ya no funciona: un appender parado no puede ser reutilizado. Consulte http://logback.qos.ch/apidocs/ch/qos/logback/core/OutputStreamAppender.html#stop() –

+1

Pls si pudiera, agregue todas las importaciones. –

1

¿Hay alguna razón específica detrás de la lectura de la propiedad de configuración de la base de datos? Una sugerencia sería usar JNDI. Logback puede leer valores configurados JNDI usando la etiqueta.

Cuestiones relacionadas