java - mkyong - Creando mĂșltiples archivos de registro de diferente contenido con log4j
log4j2 java (4)
Esto debería comenzar:
log4j.rootLogger=QuietAppender, LoudAppender, TRACE
# setup A1
log4j.appender.QuietAppender=org.apache.log4j.RollingFileAppender
log4j.appender.QuietAppender.Threshold=INFO
log4j.appender.QuietAppender.File=quiet.log
...
# setup A2
log4j.appender.LoudAppender=org.apache.log4j.RollingFileAppender
log4j.appender.LoudAppender.Threshold=DEBUG
log4j.appender.LoudAppender.File=loud.log
...
log4j.logger.com.yourpackage.yourclazz=TRACE
¿Hay alguna forma de configurar log4j para que muestre diferentes niveles de registro a diferentes appenders?
Estoy tratando de configurar múltiples archivos de registro. El archivo de registro principal captará todos los mensajes INFO y anteriores para todas las clases. (En desarrollo, capturaría todos los mensajes DEBUG y anteriores, y TRACE para clases específicas).
Entonces, me gustaría tener un archivo de registro por 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 obtener lo que busco?
Gracias, Dan
Para el archivo de registro / appender principal, configure un .Threshold = INFO
para limitar lo que realmente está conectado en el appendio a INFO y más arriba, independientemente de si los registradores tienen DEBUG, TRACE, etc. habilitados.
En cuanto a capturar DEBUG y nada por encima de eso ... probablemente tendrías que escribir un appender personalizado.
Sin embargo, recomendaría no hacer esto, ya que parece que dificultaría la solución de problemas y el análisis:
- Si su objetivo es tener un único archivo en el que pueda buscar soluciones, expandir los datos de registro a través de archivos diferentes será molesto; a menos que tenga una política de registro muy reglamentada, es probable que necesite contenido tanto de DEPURADOR como de INFO para ser capaz de rastrear la ejecución del código problemático de manera efectiva.
- Al seguir registrando todos sus mensajes de depuración, está perdiendo las ganancias de rendimiento que generalmente obtiene en un sistema de producción al bajar el registro.
Tal vez 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.
Tenía esta pregunta, pero con un giro: estaba intentando registrar diferentes contenidos en diferentes archivos. Tenía información para un registro de depuración de LowLevel y un registro de usuario de HighLevel. Quería que LowLevel fuera solo a un archivo y HighLevel a un archivo y a un syslogd.
Mi solución fue configurar los 3 apéndices 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 descifrar fue que el ''log4j.logger'' podría tener varios appenders enumerados. Intentaba hacerlo una línea a la vez.
Espero que esto ayude a alguien en algún momento!