Pregunta sobre java, log4j, configuration, logging – ¿Diferente diseño log4j para depuración y error?

6

En log4j, ¿hay alguna forma de que logger.error ("") y logger.debug ("") incluyan diferentes diseños de salida?

Me gustaría que los errores incluyan nombres de métodos y números de línea, los cuales ralentizan el rendimiento de la aplicación.

EDITAR:

Después de agregar apache-log4j-extras, funciona el siguiente archivo de configuración.

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

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

    <appender name="WARNINGS" class="org.apache.log4j.DailyRollingFileAppender">
        <param name="File" value="warnings.log"/>
        <param name="DatePattern" value="'.'yyyy-MM-dd"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{yyyy-MMM-dd HH:mm:ss} %-5p %c - %m%n%n"/>
        </layout>
        <filter class="org.apache.log4j.filter.LevelRangeFilter">
            <param name="LevelMin" value="DEBUG"/>
            <param name="LevelMax" value="WARN"/>
        </filter>
    </appender>

    <appender name="ERRORS" class="org.apache.log4j.DailyRollingFileAppender">
        <param name="File" value="errors.log"/>
        <param name="DatePattern" value="'.'yyyy-MM-dd"/>
        <layout class="org.apache.log4j.PatternLayout">
            <!-- %M for method name , %L for line number  -->
            <param name="ConversionPattern" value="%d{yyyy-MMM-dd HH:mm:ss} %-5p %c %M %L - %m%n%n"/>
        </layout>
        <filter class="org.apache.log4j.filter.LevelRangeFilter">
            <param name="LevelMin" value="ERROR"/>
            <param name="LevelMax" value="FATAL"/>
        </filter>
    </appender>

    <logger name="com.foo.bar">
        <appender-ref ref="WARNINGS"/>
        <appender-ref ref="ERRORS"/>
    </logger>

</log4j:configuration>
</code>

Este código fue utilizado para probar

<code>// goes to errors.txt
     log.error("error");
//goes to warnings.txt
     log.warn("warn");
</code>
@Gandalf gracias. Intentará. sal
En su ConversionPattern, es posible que desee utilizar% d {ISO8601}; es un formateador de tiempo optimizado que proporciona log4j como una conveniencia y por razones de velocidad. Gandalf

Tu respuesta

2   la respuesta
9

puede crear dos agregadores, cada uno usando unLevelMatchFilter y cada uno con un patrón de salida separado.

Me gusta esto. ¿Hay algún ejemplo al que puedas señalar? sal
El enlace de LevelMatchFilter ya no funciona Kairan
1

otro llamado DEBUG. Luego puede configurar fácilmente diferentes diseños de salida y solo llamar a ERROR.error o DEBUG.debug.

Incluso las personas inteligentes dicen cosas estúpidas de vez en cuando. No tomaría mis comentarios críticos sobre su consejo en log4j y en esta ocasión particular como personal. Ceki
Mal consejo. Los usuarios desprevenidos podrían seguir sus consejos, lo que sería bastante desafortunado. Ceki
Si se siente así, por favor, dígame por qué: no diga simplemente que algo es un mal consejo sin dar un mejor consejo. ¿Por qué sería desafortunado? Gandalf
@Gandalf, así es como lo estoy haciendo ahora y no me gustó tener múltiples registradores para una clase. Parecía demasiado hacky incluso para mí. sal

Preguntas relacionadas