2009-06-17 6 views
6

In log4j, c'è un modo per avere logger.error ("") e logger.debug ("") includono diversi layout di output?Layout log4j diverso per il debug e l'errore?

Mi piacerebbe che gli errori includessero i nomi dei metodi e i numeri di riga, entrambi i quali rallentano le prestazioni dell'applicazione.

EDIT:

Dopo aver aggiunto apache-log4j-extras, il seguente file di configurazione funziona.

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

Questo codice è stato utilizzato per testare

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

Nel tuo ConversionPattern puoi usare% d {ISO8601} è un formattatore di tempo ottimizzato che log4j fornisce per comodità e per considerazioni sulla velocità. – Gandalf

+0

@ Gandalf grazie. Proverò. – sal

risposta

9

All'interno della configurazione di log4j.xml, è possibile creare due appendici, ciascuna con uno LevelMatchFilter e ciascuna con un output di modello separato.

+0

Mi piace. C'è un esempio in cui puoi indicarmi? – sal

+0

Il collegamento LevelMatchFilter non funziona più – Kairan

1

vorrei solo configurazione due registratori diversi. Uno chiamato ERROR e uno chiamato DEBUG. Quindi puoi facilmente configurare diversi layout di output e chiamare solo ERROR.error o DEBUG.debug.

+3

Cattivo consiglio. Gli utenti ignari potrebbero seguire il tuo consiglio che sarebbe piuttosto sfortunato. – Ceki

+0

Se ti senti così per favore dimmi perché - non dire solo ciecamente qualcosa è un cattivo consiglio senza dare consigli migliori. Perché sarebbe sfortunato? – Gandalf

+0

Il consiglio migliore è stato già dato da "Alex B". Chiamare ERROR.error o DEBUG.debug è abbastanza stupido. Leggi la documentazione su log4j o trova un indizio. – Ceki