2009-06-17 13 views
6

Gibt es in log4j eine Möglichkeit, dass logger.error ("") und logger.debug ("") unterschiedliche Ausgabe-Layouts enthalten?Verschiedene log4j Layout für Debug und Fehler?

Ich möchte, dass Fehler Methodennamen und Zeilennummern enthalten, die die Anwendungsleistung verlangsamen.

EDIT:

Nach der Zugabe von Apache-log4j-Extras, die folgende Konfigurationsdatei funktioniert.

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

Dieser Code wurde verwendet, um zu testen

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

In Ihrem ConversionPattern möchten Sie vielleicht% d {ISO8601} verwenden, es ist ein optimierter Zeitformatierer, den log4j als Annehmlichkeit und aus Gründen der Geschwindigkeit bietet. – Gandalf

+0

@ Gandalf danke. Werde versuchen. – sal

Antwort

9

Innerhalb Ihrer log4j.xml-Konfiguration können Sie zwei Appender erstellen, die jeweils einen LevelMatchFilter verwenden und jeweils eine separate Musterausgabe haben.

+0

Ich mag das. Gibt es ein Beispiel, auf das Sie mich hinweisen können? – sal

+0

LevelMatchFilter-Verknüpfung funktioniert nicht mehr – Kairan

1

Ich würde nur Setup zwei verschiedene Logger. Eine namens ERROR und eine namens DEBUG. Dann können Sie einfach verschiedene Ausgabe-Layouts einrichten und nur ERROR.error oder DEBUG.debug aufrufen.

+3

Schlechte Beratung. Ahnungslose Benutzer folgen Ihrem Rat, was sehr bedauerlich wäre. – Ceki

+0

Wenn Sie sich so fühlen, sagen Sie mir bitte, warum - sagen Sie nicht einfach blind etwas ist schlechter Rat, ohne besseren Rat zu geben. Warum wäre es unglücklich? – Gandalf

+0

Der bessere Ratschlag wurde bereits von "Alex B" gegeben. Der Aufruf von ERROR.error oder DEBUG.debug ist ziemlich dumm. Lesen Sie die Dokumentation zu log4j oder erhalten Sie einen Hinweis. – Ceki

Verwandte Themen