Frage an java, logging, log4j, configuration – Unterschiedliches log4j-Layout für Debug und Fehler?

6

Gibt es in log4j eine Möglichkeit, dass logger.error ("") und logger.debug ("") unterschiedliche Ausgabe-Layouts enthalten?

Ich möchte, dass Fehler Methodennamen und Zeilennummern enthalten, die beide die Anwendungsleistung beeinträchtigen.

BEARBEITEN:

Nach dem Hinzufügen von apache-log4j-extras funktioniert die folgende Konfigurationsdatei.

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

Dieser Code wurde zum Testen verwendet

<code>// goes to errors.txt
     log.error("error");
//goes to warnings.txt
     log.warn("warn");
</code>
@Gandalf danke. Werde versuchen. sal
In Ihrem ConversionPattern möchten Sie möglicherweise% d {ISO8601} verwenden. Dies ist ein optimierter Zeitformatierer, den log4j aus praktischen Gründen und aus Gründen der Geschwindigkeit bereitstellt. Gandalf

Deine Antwort

2   die antwort
9

einem erstellenLevelMatchFilter und jeweils mit einem separaten Musterausgang.

Ich mag das. Gibt es ein Beispiel, auf das Sie mich verweisen können? sal
LevelMatchFilter-Link funktioniert nicht mehr Kairan
1

und einer nannte DEBUG. Dann können Sie einfach verschiedene Ausgabe-Layouts einrichten und nur ERROR.error oder DEBUG.debug aufrufen.

Sogar kluge Leute sagen von Zeit zu Zeit dumme Dinge. Ich würde meine kritischen Kommentare zu Ihrem Rat zu log4j und zu diesem besonderen Anlass nicht als persönlich ansehen. Ceki
Schlechter Rat. Ahnungslose Benutzer könnten Ihren Ratschlägen folgen, was ziemlich unglücklich wäre. Ceki
Lol - Ich wette, Ihre Mitarbeiter lieben es, mit Ihnen zu arbeiten. Gandalf
@Gandalf, so mache ich das gerade und es gefiel mir nicht, mehrere Logger für eine Klasse zu haben. Es schien sogar für mich zu abgedreht. sal

Verwandte Fragen