2009-06-17 8 views
6

W log4j, czy istnieje sposób, aby logger.error ("") i logger.debug ("") zawierały różne układy wyjściowe?Inny układ log4j do debugowania i błędu?

Chciałbym, aby błędy zawierały nazwy metod i numery linii, które spowalniają wydajność aplikacji.

EDIT:

Po dodaniu Apache log4j-extras, następujący plik config działa.

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

Ten kod został wykorzystany do przetestowania

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

W swoim projekcie konwersji możesz użyć% d {ISO8601} to zoptymalizowany formant czasu, który log4j zapewnia jako udogodnienie i ze względu na szybkość. – Gandalf

+0

@Gandalf dzięki. Spróbuję. – sal

Odpowiedz

9

W konfiguracji log4j.xml można utworzyć dwóch modułów dodających, z których każdy korzysta z LevelMatchFilter, a każdy z osobnym wyjściem wzoru.

+0

Podoba mi się to. Czy istnieje przykład, na który możesz mnie wskazać? – sal

+0

Łącze LevelMatchFilter już nie działa – Kairan

1

Chciałbym tylko konfiguracji dwóch różnych rejestratorów. Jeden nazywa się ERROR, a drugi DEBUG. Następnie możesz łatwo ustawić różne układy wyjściowe i wywoływać tylko ERROR.error lub DEBUG.debug.

+3

Zła rada. Niepodejrzewający użytkownicy mogą postępować zgodnie z twoją radą, co byłoby dość niefortunne. – Ceki

+0

Jeśli tak, proszę, powiedz mi dlaczego - nie mów na ślepo, że coś jest złą radą, nie dając lepszej porady. Dlaczego miałoby to być niefortunne? – Gandalf

+0

Lepszą radę udzielił już "Alex B". Dzwonienie do ERROR.error lub DEBUG.debug jest dość głupie. Czy przeczytać dokumentację na log4j lub uzyskać wskazówkę. – Ceki

Powiązane problemy