2012-01-03 25 views
10

Utilizo una biblioteca heredada que escribe registros usando log4j. Mi archivo predeterminado log4j.properties dirige el registro a la consola, pero en algunas funciones específicas de mi programa principal, me gustaría deshabilitar el registro por completo (de todas las clases).Cómo deshabilitar el registro de log4j desde el código de Java

yo probamos este:

Logger.getLogger(BasicImplementation.class.getName()).setLevel(Level.OFF); 

donde "BasicImplementation" es una de las principales clases que no madereras, pero que no funcionó - los registros todavía se escriben en la consola.

Aquí está mi log4j.properties:

log4j.rootLogger=warn, stdout 
log4j.logger.ac.biu.nlp.nlp.engineml=info, logfile 
log4j.logger.org.BIU.utils.logging.ExperimentLogger=warn 

log4j.appender.stdout = org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern = %-5p %d{HH:mm:ss} [%t]: %m%n 

log4j.appender.logfile = ac.biu.nlp.nlp.log.BackupOlderFileAppender 
log4j.appender.logfile.append=false 
log4j.appender.logfile.layout = org.apache.log4j.PatternLayout 
log4j.appender.logfile.layout.ConversionPattern = %-5p %d{HH:mm:ss} [%t]: %m%n 
log4j.appender.logfile.File = logfile.log 
+1

Es probable que usted tiene que desactivar el registrador de la raíz, pero por favor, puesto que su 'log4j.properties' /' log4j.xml' primero. – MaDa

+0

OK, lo publiqué –

Respuesta

18

Por lo tanto, usted tiene 3 madereros definidos, incluyendo la raíz:

log4j.rootLogger=warn, stdout 
log4j.logger.ac.biu.nlp.nlp.engineml=info, logfile 
log4j.logger.org.BIU.utils.logging.ExperimentLogger=warn 

Desafortunadamente, para desactivarlas mediante programación, es necesario especificar todos ellos en el código:

Logger.getLogger("ac.biu.nlp.nlp.engineml").setLevel(Level.OFF); 
Logger.getLogger("org.BIU.utils.logging.ExperimentLogger").setLevel(Level.OFF); 
Logger.getRootLogger().setLevel(Level.OFF); 

Here's cómo para restablecerlo a lo establecido en el archivo de configuración.

+0

¡Genial, funcionó! –

-1

Añadir lo siguiente a su archivo de registro

log4j.logger.com.class.with.package.BasicImplementation = off, logfiledata 

log4j.appender.logfiledata = ac.biu.nlp.nlp.log.BackupOlderFileAppender 
log4j.appender.logfiledata.append=false 
log4j.appender.logfiledata.layout = org.apache.log4j.PatternLayout 
log4j.appender.logfiledata.layout.ConversionPattern = %-5p %d{HH:mm:ss} [%t]: %m%n 
log4j.appender.logfiledata.File = logfiledata.log 

Si lo anterior no se detiene si se registra, al menos registrará todos los datos de la clase BasicImplementation en un archivo separado.

+0

-1. Como en Rick's – MaDa

6

Puede utilizar

Logger.getRootLogger().setLevel(Level.OFF); 

de desactivar cualquier registro en código Java

+1

Esto no funcionará si tiene registradores personalizados. – Amos

9

Si quieres lograr un perfecto silencio (como para una herramienta de línea de comandos tranquilo), siempre se puede utilizar el NullAppender.

Logger.getRootLogger().removeAllAppenders(); 
Logger.getRootLogger().addAppender(new NullAppender()); 
+0

Gracias, funcionó perfectamente para mí :) – Ashwin

0

Tal vez así:

Logger.getRootLogger().shutdown();

Cuestiones relacionadas