¿Hay alguna forma de configurar log4j para que genere diferentes niveles de registro a diferentes appenders?
Estoy intentando configurar varios archivos de registro. El archivo de registro principal capturaría todos los mensajes INFO y superiores para todas las clases. (En desarrollo, capturaría todos los mensajes DEBUG y superiores, y TRACE para clases específicas).
Entonces, me gustaría tener un archivo de registro separado. Ese archivo de registro capturaría todos los mensajes DEBUG para un subconjunto específico de clases e ignoraría todos los mensajes de cualquier otra clase.
¿Hay alguna manera de conseguir lo que busco?
Gracias Dan
Respuestas:
Esto debería ayudarte a empezar:
fuente
¿Quizás algo como esto?
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> <!-- general application log --> <appender name="MainLogFile" class="org.apache.log4j.FileAppender"> <param name="File" value="server.log" /> <param name="Threshold" value="INFO" /> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%-5p %t [%-40.40c] %x - %m%n"/> </layout> </appender> <!-- additional fooSystem logging --> <appender name="FooLogFile" class="org.apache.log4j.FileAppender"> <param name="File" value="foo.log" /> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%-5p %t [%-40.40c] %x - %m%n"/> </layout> </appender> <!-- foo logging --> <logger name="com.example.foo"> <level value="DEBUG"/> <appender-ref ref="FooLogFile"/> </logger> <!-- default logging --> <root> <level value="INFO"/> <appender-ref ref="MainLogFile"/> </root> </log4j:configuration>
Por lo tanto, todos los mensajes de información se escriben en server.log; por el contrario, foo.log contiene solo mensajes com.example.foo, incluidos los mensajes de nivel de depuración.
fuente
Tenía esta pregunta, pero con un giro: estaba tratando de registrar contenido diferente en archivos diferentes. Tenía información para un registro de depuración de bajo nivel y un registro de usuario de alto nivel. Quería que LowLevel vaya a un solo archivo y HighLevel a un archivo y a un syslogd.
Mi solución fue configurar los 3 appenders y luego configurar el registro de esta manera:
log4j.threshold=ALL log4j.rootLogger=,LowLogger log4j.logger.HighLevel=ALL,Syslog,HighLogger log4j.additivity.HighLevel=false
La parte que me resultó difícil de entender fue que 'log4j.logger' podría tener varios appenders listados. Intentaba hacerlo una línea a la vez.
¡Espero que esto ayude a alguien en algún momento!
fuente
Para el archivo de registro / appender principal, configure a
.Threshold = INFO
para limitar lo que realmente se registra en el appender a INFO y superior, independientemente de si los registradores tienen habilitado DEBUG, TRACE, etc.En cuanto a la captura de DEBUG y nada más ... probablemente tendrías que escribir un appender personalizado.
Sin embargo, recomendaría no hacer esto, ya que parece que dificultaría bastante la resolución de problemas y el análisis:
fuente
Enlace de demostración: https://github.com/RazvanSebastian/spring_multiple_log_files_demo.git
Mi solución se basa en la configuración XML usando
spring-boot-starter-log4j
. El ejemplo es un ejemplo básico que usaspring-boot-starter
y los dos registradores escriben en diferentes archivos de registro.fuente