2011-12-21 12 views
12

Necesito cambiar mis propiedades de log4j (rootLogger, MaxFileSize, etc.) en tiempo de ejecución. ¿Cómo puedo hacer esto?Cambie las propiedades de log4j en tiempo de ejecución

+0

Tal vez esto puede ayudar: http://www.avajava.com/tutorials/lessons/how-do-i-change-my-log4j-settings-whi le-my-web-application-is-running.html – alonp

+0

En log4j 2.x 'org.apache.logging.log4j.core.config.Configurator' puede ser útil en algunos casos https://logging.apache.org/ log4j/2.x/faq.html # reconfig_level_from_code –

Respuesta

6

Use LogManager.resetConfiguration(); para borrar la configuración actual y configurar de nuevo.

Otro enfoque es construir un nuevo appender y reemplazar el anterior con él (la mayoría de los appenders no admiten el cambio de su configuración). De esta forma, todos los registradores (y sus niveles, etc.) permanecen intactos.

Para que esto funcione, normalmente agrego el primer appender del código (y no con un archivo de configuración). Eso me permite guardar una referencia que hace que sea más simple eliminarla más tarde.

+0

No entendí. ¿Puedes explicar mejor? Tengo cinco Logger que usan la configuración de log4j ... Necesito cambiar MaxFileSize (es decir) y establecer este nuevo puntal para todos mis registradores (en tiempo de ejecución) ... – user1110002

+2

Un registrador es solo una clave. No tiene MaxFileSize. El tamaño del archivo es una propiedad de * appender *. Los appenders se pueden unir a los registradores y harán algo con los mensajes de registro. Entonces, ¿qué debe hacer? Encuentre los ** appenders ** (los registradores tienen métodos para obtener todos los registradores conectados) y luego debe reemplazarlos. –

+1

Ok Aaron. Intenté hacer con este código: Logger l = Logger.getLogger (myclass); LogManager.resetConfiguration(); l.setLevel (Level.DEBUG); RollingFileAppender appender = new RollingFileAppender(); appender.setMaxBackupIndex (numberOfLogsToKeep); logger.addAppender (appender); No funciona. ¿Cómo puedo cambiar el appender de mi registrador? – user1110002

5

https://github.com/apache/jena/blob/master/jena-tdb/log4j.properties tiene un archivo de propiedades log4j.

basado en él estoy usando la función configureLog4j ayudante se muestra a continuación como esto:

conjunto de nivel de registro de Jena en tiempo de ejecución

String level=org.apache.log4j.Level.OFF.toString(); 
if (debug) 
    level=org.apache.log4j.Level.INFO.toString(); 
configureLog4j(level); 

función configureLog4J

/** 
    * configure Log4J 
    * @param level -the level to use e.g. "INFO", "DEBUG", "OFF" 
    * see org.apache.log4j.Level 
    */ 
    private void configureLog4j(String level) { 
    Properties props = new Properties(); 
    props.put("log4j.rootLogger", level+", stdlog"); 
    props.put("log4j.appender.stdlog", "org.apache.log4j.ConsoleAppender"); 
    props.put("log4j.appender.stdlog.target", "System.out"); 
    props.put("log4j.appender.stdlog.layout", "org.apache.log4j.PatternLayout"); 
    props.put("log4j.appender.stdlog.layout.ConversionPattern", 
     "%d{HH:mm:ss} %-5p %-25c{1} :: %m%n"); 
    // Execution logging 
    props.put("log4j.logger.com.hp.hpl.jena.arq.info", level); 
    props.put("log4j.logger.com.hp.hpl.jena.arq.exec", level); 
    // TDB loader 
    props.put("log4j.logger.org.apache.jena.tdb.loader", level); 
    // Everything else in Jena 
    props.put("log4j.logger.com.hp.hpl.jena", level); 
    props.put("log4j.logger.org.apache.jena.riot", level); 
    // TDB 
    // TDB syslog. 
    props.put("log4j.logger.TDB", level); 
    props.put("log4j.logger.com.hp.hpl.jena.tdb", level); 
    props.put("log4j.logger.com.hp.hpl.jena.tdb.transaction", level); 
    props.put("log4j.logger.com.hp.hpl.jena.tdb.transaction.NodeTableTrans", 
     level); 
    props.put("log4j.logger.com.hp.hpl.jena.tdb.transaction.TransactionManager",level); 
    props.put("log4j.logger.com.hp.hpl.jena.tdb.transaction.TestTransSystem",level); 
    // Joseki server 
    props.put("log4j.logger.org.joseki", level); 
    LogManager.resetConfiguration(); 
    PropertyConfigurator.configure(props); 
    } 
Cuestiones relacionadas