2010-05-04 14 views
140

Utilizo log4j y me gustaría enrutar la salida de ciertos registradores a archivos específicos.log4j: Salida de registro de una clase específica a un appender específico

Ya tengo varios apéndices en su lugar. Ahora, para facilitar la depuración, quiero decirle a log4j que la salida generada por una clase específica (por ejemplo, foo.bar.Baz) se debe escribir en un archivo de registro específico.

¿Se puede hacer esto?

Respuesta

178

Un ejemplo:

log4j.rootLogger=ERROR, logfile 

log4j.appender.logfile=org.apache.log4j.DailyRollingFileAppender 
log4j.appender.logfile.datePattern='-'dd'.log' 
log4j.appender.logfile.File=log/radius-prod.log 
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout 
log4j.appender.logfile.layout.ConversionPattern=%-6r %d{ISO8601} %-5p %40.40c %x - %m\n 

log4j.logger.foo.bar.Baz=DEBUG, myappender 
log4j.additivity.foo.bar.Baz=false 

log4j.appender.myappender=org.apache.log4j.DailyRollingFileAppender 
log4j.appender.myappender.datePattern='-'dd'.log' 
log4j.appender.myappender.File=log/access-ext-dmz-prod.log 
log4j.appender.myappender.layout=org.apache.log4j.PatternLayout 
log4j.appender.myappender.layout.ConversionPattern=%-6r %d{ISO8601} %-5p %40.40c %x - %m\n 
+20

ahh - así de simple! ¡Gracias! ¿La configuración log4j.additivity.foo.bar.Baz = false impone que la salida de Baz no se muestre en el apéndice de rootLogger? – gubrutz

+0

Sí, así es –

+2

¿Para qué versión de log4J es esto? Estoy tratando de encontrar la configuración xml para hacer lo mismo para log4j versión 1.2.17 –

12

Aquí está una respuesta en cuanto a la configuración XML, tenga en cuenta que si no se da al archivo appender un ConversionPattern creará 0 archivo de bytes y no se escribe nada:

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> 

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> 
    <appender name="console" class="org.apache.log4j.ConsoleAppender"> 
     <param name="Target" value="System.out"/> 
     <layout class="org.apache.log4j.PatternLayout"> 
      <param name="ConversionPattern" value="%-5p %c{1} - %m%n"/> 
     </layout> 
    </appender> 

    <appender name="bdfile" class="org.apache.log4j.RollingFileAppender"> 
     <param name="append" value="false"/> 
     <param name="maxFileSize" value="1GB"/> 
     <param name="maxBackupIndex" value="2"/> 
     <param name="file" value="/tmp/bd.log"/> 
     <layout class="org.apache.log4j.PatternLayout"> 
      <param name="ConversionPattern" value="%-5p %c{1} - %m%n"/> 
     </layout> 
    </appender> 

    <logger name="com.example.mypackage" additivity="false"> 
     <level value="debug"/> 
     <appender-ref ref="bdfile"/> 
    </logger> 

    <root> 
     <priority value="info"/> 
     <appender-ref ref="bdfile"/> 
     <appender-ref ref="console"/> 
    </root> 

</log4j:configuration> 
+1

es fundamental eliminar '' de '' - de lo contrario verá todo su registro copiado a este archivo también. – sab

+0

cómo configurar esto para el pacakge predeterminado o para una clase específica sin paquete? –

+0

Es el elemento ' ...'. Especifique la clase o paquete como el nombre y el appender como el apéndice del archivo. – mikeb

Cuestiones relacionadas