Wie kann ich Logback so konfigurieren , dass verschiedene Ebenen für einen Logger an verschiedenen Zielen protokolliert werden?
Zeichnet Logback bei der folgenden Logback-Konfiguration beispielsweise INFO
Nachrichten an STDOUT
und ERROR
Nachrichten an auf STDERR
?
(Beachten Sie, dass dieses Beispiel eine Variation des logback-examples/src/main/java/chapters/configuration/sample4.xml
in Kapitel 3: Logback-Konfiguration gezeigten Beispiels ist .)
<configuration>
<appender name="STDOUT"
class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>
%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
</pattern>
</encoder>
</appender>
<appender name="STDERR"
class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>
%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
</pattern>
</encoder>
<target>System.err</target>
</appender>
<!-- What is the effective level of "chapters.configuration"? -->
<logger name="chapters.configuration" level="INFO" additivity="false">
<appender-ref ref="STDOUT" />
</logger>
<logger name="chapters.configuration" level="ERROR" additivity="false">
<appender-ref ref="STDERR" />
</logger>
<!-- turn OFF all logging (children can override) -->
<root level="OFF">
<appender-ref ref="STDOUT" />
</root>
</configuration>
levels are ordered as follows: TRACE < DEBUG < INFO < WARN < ERROR.
Antworten:
Update: Für einen vollständig konfigurationsbasierten Ansatz mit Groovy siehe Dean Hillers Antwort .
- -
Mit Logback-Filtern können Sie einige interessante Dinge tun . Die folgende Konfiguration druckt nur Warn- und Fehlermeldungen an stderr und alles andere an stdout.
logback.xml
com.foo.StdOutFilter
com.foo.ErrOutFilter
quelle
Ich glaube, das wäre die einfachste Lösung:
quelle
ThresholdFilter
stattdessen s verwenden.<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
der tatsächlichen Rolle der Angabe<root level="INFO"> <appender-ref ref="STDOUT"/> <appender-ref ref="STDERR" /> </root>
in logback.xml?<onMatch>
und bin<onMismatch>
nicht definiert fürThresholdFilter
. Entfernen Sie sie einfach und es wird wie vorgesehen funktionieren.Lösung, die nur auf der Konfiguration basiert , mit einem ThresoldFilter und LevelFilters, um die Dinge wirklich einfach zu verstehen :
quelle
ThresoldFilter
.ThresoldFilter
STDOUT verwenden, anstatt fünf zu verwendenLevelFilter
?Okay, hier ist meine Lieblings-XML-Methode. Ich mache das für die Eclipse-Version, damit ich kann
und aus irgendeinem Grund zeigt SO dies nicht alles richtig, aber die meisten scheinen da zu sein ...
quelle
logback.groovy
Version dieser Look Line?Die einfachste Lösung ist die Verwendung
ThresholdFilter
für die Appender:Vollständiges Beispiel:
Update: Wie Mike im Kommentar betonte, werden hier Nachrichten mit ERROR-Level sowohl an STDOUT als auch an STDERR gedruckt. Ich bin mir jedoch nicht sicher, was die Absicht des OP war. Sie können Mikes Antwort versuchen, wenn dies nicht das ist, was Sie wollten.
quelle
Dies ist die von mir verwendete Konfiguration, die einwandfrei funktioniert. Sie basiert auf XML + JaninoEventEvaluator (erfordert, dass die Janino- Bibliothek zu Classpath hinzugefügt wird).
quelle
Ich verwende logback.groovy, um mein Logback zu konfigurieren, aber Sie können dies auch mit der XML-Konfiguration tun:
Ich denke, die Verwendung von GEventEvaluator ist einfacher, da keine Filterklassen erstellt werden müssen.
Ich entschuldige mich für mein Englisch!
quelle
Versuche dies. Sie können einfach eingebautes
ThresholdFilter
und verwendenLevelFilter
. Sie müssen keine eigenen Filter programmgesteuert erstellen. In diesem Beispiel werden die WARN- und ERROR-Ebenen in System.err protokolliert und in System.out ausgeführt:quelle
Ich nehme diese Antwort nicht zur Kenntnis, da sie lediglich eine Kombination der beiden besten Antworten oben ist: die von X. Wo Satuk und die von Sébastien Helbert:
ThresholdFilter
ist reizend, aber Sie können sie nicht so konfigurieren, dass sie sowohl eine höhere als auch eine höhere Ebene hat niedrigeres Level *, aber wenn Sie es mit zwei kombinieren, stellen SieLevelFilters
"DENY" einWARN
und esERROR
ist ein Vergnügen.Sehr wichtig : Vergessen Sie nicht das
<target>System.err</target>
Tag im STDERR-Appender: Durch mein Auslassen war ich einige Minuten lang frustriert.* Es gibt jedoch eine Methode
decide
in der API, aber ich habe keine Ahnung, wie Sie sie in diesem Kontext verwenden würden.quelle
Keine Programmierung erforderlich. Konfiguration machen Ihr Leben einfach.
Unten finden Sie die Konfiguration, mit der unterschiedliche Protokollebenen in unterschiedlichen Dateien protokolliert werden
quelle
quelle
Beispiel für die Ausgabe farbiger Nachrichten der Stufe "INFO" oder höher an die Konsole und Nachrichten der Stufe "WARN" oder höher an die Datei .
Ihre logback.xml- Datei:
quelle