log4j: registro de salida de una clase específica a un apéndice específico

161

Uso log4j y me gustaría enrutar la salida de ciertos registradores a archivos específicos.

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

Se puede hacer esto?

gubrutz
fuente

Respuestas:

203

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
Maurice Perry
fuente
21
ahh - así de simple! ¡Gracias! ¿La configuración log4j.additivity.foo.bar.Baz = false exige que la salida de Baz no se muestre en el apéndice del rootLogger?
gubrutz
3
¿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
AC
1
@RodrigoGurgel sí, nada inusual allí
Maurice Perry
44
@dwjohnston establecer la aditividad en falso evitará que el registrador inicie sesión en los anexores de sus antepasados ​​(es cierto de forma predeterminada).
Maurice Perry
1
alguna idea sobre la configuración xml?
Igor Donin el
21

Aquí hay una respuesta con respecto a la configuración XML, tenga en cuenta que si no le da al adjunto un archivo ConversionPatterncreará un archivo de 0 bytes y no escribirá 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>
mikeb
fuente
2
es fundamental para eliminar <appender-ref ref="bdfile"/>a partir <root>- de lo contrario se verá toda su registro de copia en este archivo también.
sab
¿Cómo configurar esto para el paquete predeterminado o para una clase específica sin paquete?
Prasad Jadhav
Es el <logger>...elemento Especifique la clase o paquete como el nombre y el apéndice como el apéndice del archivo.
mikeb