2009-06-17 10 views
6

En log4j, ¿hay alguna forma de que logger.error ("") y logger.debug ("") incluyan diferentes diseños de salida?¿Disposición diferente de log4j para la depuración y el error?

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

EDIT:

Después de añadir Apache-log4j-extras, el siguiente archivo de configuración funciona.

<?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> 

Este código se utilizó para probar

// goes to errors.txt 
    log.error("error"); 
//goes to warnings.txt 
    log.warn("warn"); 
+1

En su ConversionPattern puede usar% d {ISO8601} es un formateador de tiempo optimizado que log4j proporciona para su conveniencia y para consideraciones de velocidad. – Gandalf

+0

@Gandalf gracias. Intentará. – sal

Respuesta

9

Dentro de su configuración de log4j.xml, puede crear dos appenders, cada uno usando un LevelMatchFilter y cada uno con una salida de patrón separada.

+0

Me gusta esto. ¿Hay algún ejemplo al que me puedas dirigir? – sal

+0

El enlace LevelMatchFilter ya no funciona – Kairan

1

me acaba de configuración de dos registradores diferentes. Uno llamado ERROR y otro llamado DEPURADOR. Luego puede configurar fácilmente diferentes diseños de salida y solo llamar a ERROR.error o DEBUG.debug.

+3

Un mal consejo. Los usuarios desprevenidos podrían seguir sus consejos, lo que sería desafortunado. – Ceki

+0

Si así lo desea, por favor dígame por qué; no solo diga ciegamente que algo es un mal consejo sin dar un mejor consejo. ¿Por qué sería desafortunado? – Gandalf

+0

El mejor consejo ya fue dado por "Alex B". Llamar a ERROR.error o DEBUG.debug es bastante tonto. Lea la documentación en log4j u obtenga una pista. – Ceki

Cuestiones relacionadas