2013-02-25 5 views
6

ich eine logback Konfiguration haben, die eine appender mit einem Schwellwert-Filter hat:logback - Remapping eine Protokollebene für einen bestimmten Logger

<appender name="SYSLOG" class="ch.qos.logback.classic.net.SyslogAppender"> 
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> 
    <level>INFO</level> 
    </filter> 
    ... 
</appender> 

Dies stellt sicher, dass nur Informationen und höher (warnen, Fehler) zu syslog protokolliert werden . Eine der Bibliotheken von Drittanbietern, die wir verwenden, protokolliert jedoch ein bestimmtes Ereignis bei DEBUG, und ich möchte dieses Ereignis in Syslog protokollieren. Der erste Ansatz, den ich mir vorgenommen hatte, war, den Loglevel im Logger neu zu mappen, aber ich bin mir nicht sicher, ob das möglich ist. Etwas wie:

offensichtlich ist der "logAs" -Parameter nicht vorhanden, also kann ich das nicht tun. Was wäre der beste Ansatz, um akka.some.Thing auf dem SYSLOG Appender zu loggen und den Filter für andere Logger zu verwenden? Der andere Ansatz wäre, einen zweiten Appender namens SYSLOG2 zu erstellen, der den Filter nicht an seinem Platz hat und den spezifischen Logger für die Verwendung festlegt. Er fragt sich, ob es eine Möglichkeit gibt, das Logback mit nur einem SYSLOG-Appender zu konfigurieren ...

Danke,

+0

Warum haben Sie den Schwellenwertfilter? Sind Ihre anderen "Logger" -Konfigurationen höher als INFO an diesen Appender? Wenn ja warum? –

+0

Ja, wir loggen an 2 Standorten. Der Syslog-Appender endet in einem Indexer mit Lizenzierungs-Constaints, so dass wir niemals etwas niedriger als INFO protokollieren wollen. Wenn wir jedoch debuggen wollen, aktivieren wir das Debugging und dies geht zu einem Dateiappender (ohne das gesamte Debuggunk in syslog). – Brett

+1

Interessant. Wenn es Ihre Umgebung zulässt, wäre es am einfachsten, einen eigenen kleinen Filter zu schreiben, der alles, was Lizenzprobleme hat, VERWEIGERT. Andernfalls könnte einer der komplexeren Filter - die Ausdrücke zulassen - funktionieren, aber ein zweiter Appender wird wahrscheinlich leichter zu verstehen und zu warten sein. –

Antwort

6

Ich weiß, das ist eine alte Frage - aber es ist tatsächlich möglich zu tun, was das OP mit einem einzigen SyslogAppender machen will.

Wenn andere nach einem Beispiel für die Neuzuordnung suchen, können Sie sich die Klasse org.springframework.boot.logging.logback.LevelRemappingAppender ansehen. Mit diesem Appender ist es möglich, den Appender für das Log-Ereignis abzugleichen, und es ist auch möglich, das Level, das für das letzte Log-Ereignis verwendet wird, neu zu mappen - z. durch Ändern einer DEBUG-Ebene in eine INFO-Ebene.

Beispiel zur Verwendung in logback Konfigurationsdatei (aus https://github.com/spring-projects/spring-boot/blob/master/spring-boot/src/main/resources/org/springframework/boot/logging/logback/defaults.xml):

<appender name="DEBUG_LEVEL_REMAPPER" class="org.springframework.boot.logging.logback.LevelRemappingAppender"> 
    <!-- Optional: specify the destination logger the event ends up in --> 
    <destinationLogger>org.springframework.boot</destinationLogger> 
    <!-- Optional: specify log level remapping --> 
    <remapLevels>INFO->DEBUG,ERROR->WARN</remapLevels> 
</appender> 

<logger name="org.thymeleaf" additivity="false"> 
    <appender-ref ref="DEBUG_LEVEL_REMAPPER"/> 
</logger> 

Beachten Sie, dass ein bestimmtes Ziel Logger Remapping kann es schwieriger zu machen, den Quellcode des ursprünglichen Protokollereignisses zu finden - so verwenden Sie es mit Pflege.

3

Was Sie tun können, ist eine zweite Logger + appender mit dem gleichen Ausgang zu schreiben:

<appender name="SYSLOG-2" class="ch.qos.logback.classic.net.SyslogAppender"> 
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> 
    <level>DEBUG</level> 
    </filter> 
    ... 
</appender> 

<logger name="akka.some.Thing" level="DEBUG"> 
    <appender-ref ref="SYSLOG-2" /> 
</logger> 

Dies wird Ihre spezifische DEBUG Aufgaben auf den gleichen Ausgang hinzuzufügen.

+0

Yep - das war meine Idee - "der andere Ansatz wäre, einen 2. Appender zu erstellen" laut meinem ursprünglichen Beitrag - "aber ich fragte mich, ob es eine Möglichkeit gibt, Logback mit nur 1 Appender zu konfigurieren" war der Fehler. Der einzige Weg, um mit 1 Appender zu tun ist, einen benutzerdefinierten Appender zu schreiben, der eine "Remap" -Typ-Konfiguration pro Logger akzeptiert, denke ich. – Brett