2012-03-11 8 views
61

No puedo entender cómo configurar mi log4j para que mi debugLog y mi reportsLog estén separados el uno del otro (no son aditivos). ¿Por qué es así, que en la configuración siguiente, el reportsLog siempre está vacío?¿Cómo puedo crear 2 archivos de registro separados con un archivo de configuración log4j?

log4j.rootLogger=TRACE, stdout, debugLog 

log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern=%d [%24F:%t:%L] - %m%n 

log4j.appender.debugLog=org.apache.log4j.FileAppender 
log4j.appender.debugLog.File=logs/debug.log 
log4j.appender.debugLog.layout=org.apache.log4j.PatternLayout 
log4j.appender.debugLog.layout.ConversionPattern=%d [%24F:%t:%L] - %m%n 

log4j.reportsLog=DEBUG,reportsLog 
log4j.appender.reportsLog=org.apache.log4j.FileAppender 
log4j.appender.reportsLog.File=logs/reports.log 
log4j.appender.reportsLog.layout=org.apache.log4j.PatternLayout 
log4j.appender.reportsLog.layout.ConversionPattern=%d [%24F:%t:%L] - %m%n 

Y aquí es mi código Java:

package test; 

import org.apache.log4j.Logger; 
import org.apache.log4j.PropertyConfigurator; 

public class HelloLogger { 

    static final Logger debugLog = Logger.getLogger("debugLog"); 
    static final Logger resultLog = Logger.getLogger("reportsLog"); 

    public static void main(String[] args) { 
     PropertyConfigurator.configure("log4j.properties"); 
     debugLog.debug("Hello debugLog message"); 
     resultLog.debug("Hello reportsLog message"); 
    } 
} 

Respuesta

123

Prueba la siguiente configuración:

log4j.rootLogger=TRACE, stdout 

log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern=%d [%24F:%t:%L] - %m%n 

log4j.appender.debugLog=org.apache.log4j.FileAppender 
log4j.appender.debugLog.File=logs/debug.log 
log4j.appender.debugLog.layout=org.apache.log4j.PatternLayout 
log4j.appender.debugLog.layout.ConversionPattern=%d [%24F:%t:%L] - %m%n 

log4j.appender.reportsLog=org.apache.log4j.FileAppender 
log4j.appender.reportsLog.File=logs/reports.log 
log4j.appender.reportsLog.layout=org.apache.log4j.PatternLayout 
log4j.appender.reportsLog.layout.ConversionPattern=%d [%24F:%t:%L] - %m%n 

log4j.category.debugLogger=TRACE, debugLog 
log4j.additivity.debugLogger=false 

log4j.category.reportsLogger=DEBUG, reportsLog 
log4j.additivity.reportsLogger=false 

continuación, configure los registradores en el código Java en consecuencia:

static final Logger debugLog = Logger.getLogger("debugLogger"); 
static final Logger resultLog = Logger.getLogger("reportsLogger"); 

¿Quieres que la salida vaya a stdout? Si esto no ocurre, la primera línea de log4j.properties a:

log4j.rootLogger=OFF 

y deshacerse de las líneas stdout.

+0

¡Gracias! Recorrí internet durante horas y no pude encontrar un ejemplo como este. ¡Gracias! Lo intenté y funcionó perfecto. – djangofan

+0

¡buen trabajo! pero additivty es additiv [i] ty :) – Wei

4

modificar su archivo log4j.properties en consecuencia:

log4j.rootLogger=TRACE,stdout 
... 
log4j.logger.debugLog=TRACE,debugLog 
log4j.logger.reportsLog=DEBUG,reportsLog 

cambiar los niveles de registro para cada registrador en función de sus necesidades.

Cuestiones relacionadas