2012-06-28 10 views
37

Me gustaría tener dos registradores log4j diferentes en mi aplicación, y para que no haya "superposición" entre el contenido que escriben en sus registros de respeto.archivo log4j.properties - varios registradores en la misma clase

Por ejemplo:

  • Logger1 escribe los eventos relacionados con la información a un conjunto de eventos del sistema
  • Logger2 escribe los eventos relacionados con la información a otro conjunto de eventos del sistema
  • No debería aparecer en el registro de dos veces

Mis log4j.properties es el siguiente:

log4j.rootLogger=DEBUG, stdout 
log4j.logger.org.apache=DEBUG, stdout 
log4j.logger.xdasLogger=DEBUG, xdas 

log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern=%m%n 

log4j.appender.xdas=org.apache.log4j.ConsoleAppender 
log4j.appender.xdas.layout=org.apache.log4j.PatternLayout 
log4j.appender.xdas.layout.ConversionPattern=%d %-5p %c - %m%n 

código Mi Java es la siguiente:

public static void main(String[] args) { 
    PropertyConfigurator.configure(Client.class 
      .getResource("/log4j.properties")); 
    xdasLogger = Logger.getLogger("xdasLogger"); 
    logger = Logger.getLogger(Client.class); 

    logger.info("normal"); 
    xdasLogger.info("xdas"); 
} 

Pero mi salida de la consola es el siguiente:

normal 
2012-06-28 09:52:44,580 INFO xdasLogger - xdas 
xdas 

Tenga en cuenta que "xdas" se registra por tanto logger y xdasLogger, lo cual es indeseable.

¿Alguien sabe qué cambios necesito poner en mi log4j.properties para cambiar la salida de la consola a lo siguiente?

normal 
2012-06-28 09:52:44,580 INFO xdasLogger - xdas 

Solución (tomado de respuesta aceptada):

log4j.rootLogger=DEBUG, stdout 
log4j.logger.org.apache=DEBUG, stdout 
log4j.logger.xdasLogger=DEBUG, xdas 

log4j.additivity.org.apache=false 
log4j.additivity.xdasLogger=false 

log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern=%m%n 

log4j.appender.xdas=org.apache.log4j.ConsoleAppender 
log4j.appender.xdas.layout=org.apache.log4j.PatternLayout 
log4j.appender.xdas.layout.ConversionPattern=%d %-5p %c - %m%n 

Respuesta

41

intente configurar la aditividad de los registradores a falso. Esto evitará la propagación al rootLogger.

log4j.additivity.org.apache=false 
log4j.additivity.xdasLogger=false 
+0

Su solución parece absolutamente correcta pero no funciona para mí. Agregué estas líneas a '/ etc/spark/conf/log4j.properties', ¿no es correcto? ¿Debo reiniciar 'Spark' (o reiniciar todo lo demás) para que las propiedades actualizadas se recojan? –

+0

¿Utilizó los nombres del registrador ya configurados en log4j.properties para Spark? ¿O quizás Spark usa log4j2 que tiene un archivo de propiedad diferente - log4j2.properties? Si puede dar más detalles, puedo intentar ayudar – kjp

+0

** @ kjp ** por lo que sé, 'Spark 2.3.0' (lanzado el 28 de febrero de 2018) todavía usa' log4j' como se dice [aquí] (https : //spark.apache.org/docs/latest/configuration.html#configuring-logging). Además, ¿a qué se refiere con * "nombres de registrador ya configurados en log4j.properties para Spark" *? En los archivos 'log4j.properties' veo líneas como estas' log4j.rootCategory = WARN, console' & 'log4j.appender.console = org.apache.log4j.ConsoleAppender' –

Cuestiones relacionadas