Tengo los dos paquetes siguientes:

com.miempresa.proyecto.primera

com.miempresa.proyecto.segundo

Me gustaría configurar Log4J (SLF4J) para escribir los registros de un paquete a un archivo, y desde el otro paquete a un segundo archivo. No quiero ser mezclados juntos.

Para ser claros, este es un proyecto/proceso de ejecución.

He tratado de filtrado y con los madereros, pero parecen ser ignorados por log4j. Ambos archivos son siempre idénticos.

Edit: Gracias por las respuestas hasta ahora, esto es lo que tengo y no funciona. Tanto los archivos de salida son idénticos.

<configuration debug="true">
<contextName>dev</contextName>
<appender name="FIRST_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>A:/dev/LogTesting/logs/first.log</file>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>A:/dev/LogTesting/logs/first.%d{yyyyMMdd}%d{_HHmmss,aux}.log.gz</fileNamePattern>
</rollingPolicy>
<encoder>
<pattern>%d{MMM dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<appender name="SECOND_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>A:/dev/LogTesting/logs/second.log</file>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>A:/dev/LogTesting/logs/second.%d{yyyyMMdd}%d{_HHmmss,aux}.log.gz</fileNamePattern>
</rollingPolicy>
<encoder>
<Pattern>%d{MMM dd HH:mm:ss.SSS} %property{HOSTNAME} [%thread] %level %logger{36} %msg%n</Pattern>
</encoder>
</appender>
<!-- =============================================================== -->
<logger name="com.test.apples" additivity="false">
<level value="DEBUG" />
<appender-ref ref="FIRST_FILE"  />
</logger>
<logger name="com.test.oranges" additivity="false">
<level value="DEBUG" />
<appender-ref ref="SECOND_FILE"  />
</logger>
<!-- =============================================================== -->
<category name="com.test.apples" additivity="false">
<priority value="DEBUG"/>
<appender-ref ref="FIRST_FILE"/>
</category>
<category name="com.test.oranges" additivity="false">
<priority value="DEBUG"/>
<appender-ref ref="SECOND_FILE"/>
</category>
<!-- =============================================================== -->
<!-- default -->
<root level="WARN">
<appender-ref ref="FIRST_FILE" />
<appender-ref ref="SECOND_FILE" />
</root>

OriginalEl autor Csaba | 2013-05-15

4 Comentarios

  1. 23

    Intentar este es el ejemplo de las propiedades de archivo:

    log4j.rootLogger=DEBUG, CONSOLE
    # Each package has different appender name     
    log4j.logger.com.mycorp.project.first=DEBUG, FIRST
    log4j.logger.com.mycorp.project.second=DEBUG, SECOND
    log4j.appender.FIRST=org.apache.log4j.RollingFileAppender
    log4j.appender.FIRST.File=./first.log
    log4j.appender.FIRST.layout=org.apache.log4j.PatternLayout
    log4j.appender.SECOND=org.apache.log4j.RollingFileAppender
    log4j.appender.SECOND.File=./second.log
    log4j.appender.SECOND.layout=org.apache.log4j.PatternLayout

    o esta para XML (sólo resaltar parte importante):

    <!-- FIRST appender definition -->
    <appender name="FIRST" class="org.apache.log4j.FileAppender">
    ...
    </appender> 
    <!-- SECOND appender definition -->
    <appender name="SECOND" class="org.apache.log4j.FileAppender">
    ...
    </appender>
    <!-- logger package com.mycorp.project.first -->
    <logger name="com.mycorp.project.first">
    <level value="DEBUG" />
    <appender-ref ref="FIRST"/>
    </logger>
    <!-- logger for package com.mycorp.project.second -->
    <logger name="com.mycorp.project.second">
    <level value="DEBUG" />
    <appender-ref ref="SECOND"/>
    </logger>
    Perdón, se me olvidó mencionar que tengo un archivo de configuración xml. ¿Cuál es el equivalente de esto en xml? log4j.logger.com.miempresa.proyecto.primero=DEBUG, PRIMER
    Ver mi respuesta actualizada. Puede que sea útil para ti amigo!
    Tengo dos preguntas: 1. Si la diferencia entre los appenders es solo el nombre de archivo, hay una manera de definir las propiedades comunes una vez (XML) para evitar la redundancia? 2. Es posible asignar un registrador a múltiples paquetes?

    OriginalEl autor Wayan Wiprayoga

  2. 2

    Crear dos appenders LOG1 y LOG2, uno por cada archivo de registro. Después de que definir dos categorías(una para cada paquete) con referencia a estos appenders int el archivo de configuración de log4j.

    <category name="com.mycorp.project.first" additivity="true">
    <priority value="TRACE"/>
    <appender-ref ref="LOG1"/>
    </category>

    Appender2

    <category name="com.mycorp.project.second" additivity="true">
    <priority value="TRACE"/>
    <appender-ref ref="LOG2"/>
    </category>

    OriginalEl autor basiljames

  3. 1

    poner dynamiclly ruta de acceso del archivo .en log4j.propiedades

    log4j.appender.FILE.File=${file.name}

    Y en java conjunto de ruta de acceso del archivo System.setProperty("file.name", FILEPATH);

    +1 para la actualización dinámica de la ruta.. Gracias

    OriginalEl autor KhAn SaAb

  4. 0

    que acaba de especificar 2 appenders, pero le dan el mismo nombre de archivo de registro para ambos.

    #same appender for both packages
    log4j.logger.package1=INFO,MyCommonLogger    
    log4j.logger.package2=INFO,MyCommonLogger
    log4j.appender.MyCommonLogger=org.apache.log4j.DailyRollingFileAppender
    log4j.appender.MyCommonLogger.layout=org.apache.log4j.PatternLayout
    log4j.appender.MyCommonLogger.layout.ConversionPattern=%t %d{MM/dd/yy HH:mm:ss} %x %-5p %c %M - %m%n
    #single log file for logs from both packages
    log4j.appender.MyCommonLogger.File=/somewhereonserver/log/mysinglelogfile.log

    OriginalEl autor ObviousChild

Dejar respuesta

Please enter your comment!
Please enter your name here