uso usar rootcategory logger hacer fecha conversionpattern como archivo log4j

usar - Log4j: mĂșltiples madereros, niveles y agregadores



logger log4j java (1)

Este problema se puede resolver en dos partes.

1. Prevenir mensajes de registro duplicados

Los mensajes de registro se escribieron dos veces porque enumeramos el Fender appender tanto en el rootLogger como en la categoría log4j.logger.foobar . Así que debemos eliminar el appender y solo definir el nivel de registro en la categoría:

log4j.rootLogger = WARN, FOO, BAR log4j.logger.foobar = INFO

Esto significa que los mensajes de nivel INFO de log4j.logger.foobar se propagan hacia arriba a TODOS los registradores y agregadores en rootLogger , pero solo se escribirán en cada archivo de registro una vez.

2. Evitar que el mensaje de nivel INFO se escriba en bar.log

Como todos los mensajes de registro de nivel INFO para la categoría log4j.logger.foobar están siendo heredados por los agregadores en rootLogger , debemos detener al aplicador BAR para grabar los mensajes de nivel INFO .

Podemos lograr esto configurando la propiedad Umbral en el propio appender de BAR :

log4j.appender.BAR.Threshold = WARN

Esto evitará que las declaraciones de nivel INFO se registren en el archivo bar.log , ya que solo aceptará niveles de WARN y superiores.

Por lo tanto, el archivo de propiedades log4j completo sería el siguiente:

log4j.rootLogger = WARN, FOO, BAR log4j.logger.foobar = INFO log4j.appender.FOO = org.apache.log4j.RollingFileAppender log4j.appender.FOO.layout = org.apache.log4j.PatternLayout log4j.appender.FOO.layout.ConversionPattern = %d{ISO8601} %-5p %c ~ %m%n log4j.appender.FOO.File = foo.log log4j.appender.FOO.Threshold = INFO log4j.appender.BAR = org.apache.log4j.RollingFileAppender log4j.appender.BAR.layout = org.apache.log4j.PatternLayout log4j.appender.BAR.layout.ConversionPattern = %d{ISO8601} %-5p %c ~ %m%n log4j.appender.BAR.File = bar.log log4j.appender.BAR.Threshold = WARN

Estoy teniendo problemas con los mensajes de registro duplicados al escribir en varios archivos de registro utilizando log4j.

Actualmente, estoy intentando registrar datos de nivel INFO (y hacia arriba) para el registrador específico llamado foobar en mi archivo foo.log y luego todos los mensajes de registro de nivel WARN (y hacia arriba) para todos los registradores en el archivo bar.log .

Como resultado de esto, se escribieron mensajes de registro duplicados en el archivo foo.log (cada línea se registró dos veces) y después de una investigación rápida, descubrí que la sugerencia para solucionar esto era agregar log4j.additivity.foobar=false a mis propiedades expediente.

El problema con esto es que aunque detiene las líneas duplicadas, el mensaje WARN del registrador foobar nunca se escribe en el archivo bar.log .

Mi archivo de propiedades log4j es el siguiente:

log4j.rootLogger = WARN, FOO, BAR log4j.logger.foobar = INFO, FOO log4j.additivity.foobar = false log4j.appender.FOO = org.apache.log4j.RollingFileAppender log4j.appender.FOO.layout = org.apache.log4j.PatternLayout log4j.appender.FOO.layout.ConversionPattern = %d{ISO8601} %-5p %c ~ %m%n log4j.appender.FOO.File = foo.log log4j.appender.BAR = org.apache.log4j.RollingFileAppender log4j.appender.BAR.layout = org.apache.log4j.PatternLayout log4j.appender.BAR.layout.ConversionPattern = %d{ISO8601} %-5p %c ~ %m%n log4j.appender.BAR.File = bar.log

¿Alguien sabe cómo puedo escribir los mensajes de registro en ambos archivos de registro (como lo hacía antes de comenzar a configurar la propiedad de additivity ) y aún así evitar los mensajes de registro duplicados?

Tenga en cuenta que este es un resumen simplificado del problema. En el escenario del mundo real hay varios registradores y más de dos archivos de registro