0

Ich versuche, Java-Protokolle in Syslog im JSON-Format zu protokollieren, aber ich habe ein seltsames Problem gefunden, bei dem der Syslog-Header nicht wie erwartet festgelegt wird.logback logstash encoder Syslog-Header nicht gesetzt

Ich teste diese auf einem Mac und unter Verwendung von wireshark die Pakete zu ergreifen, während sie mit dem 514-Port UDP (via Loopback-Schnittstelle)

Mein logback.xml wird wie folgt gesendete:

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
    <conversionRule conversionWord="syslogStart" converterClass="ch.qos.logback.classic.pattern.SyslogStartConverter"/> 

    <appender name="stash" class="net.logstash.logback.appender.LogstashSocketAppender"> 
    <host>localhost</host> 
    <port>514</port> 
    <prefix class="ch.qos.logback.core.encoder.LayoutWrappingEncoder"> 
     <layout class="ch.qos.logback.classic.PatternLayout"> 
     <pattern>%syslogStart{LOCAL5}</pattern> 
     </layout> 
    </prefix> 
    </appender> 

    <root level="INFO"> 
    <appender-ref ref="stash"/> 
    </root> 
</configuration> 

und wenn ich am Ausgang von wireshark sehe ich sehe nur die JSON (kein PRI-Header-Feld angegeben)

[truncated]Syslog message: (unknown): {"@timestamp":"2016-03-22T12:13:37.270+11:00","@version":1,"message":"Started App in 4.327 seconds (JVM running for 4.92)","logger_name":"au.com.xxx.App","threa 

protokollierte Wenn ich zum Standard logback Syslog appender wechseln (nicht JSON Ausgabe)

... 
    <appender name="SYSLOG" class="ch.qos.logback.classic.net.SyslogAppender"> 
    <syslogHost>127.0.0.1</syslogHost> 
    <Facility>LOCAL5</Facility> 
    <SuffixPattern>%-5level MyApp %logger %msg</SuffixPattern> 
    </appender> 
... 

ich die richtige Header Anlage Rohwert < 174> siehe tun und analysierte Werte in den wireshark Paketen LOCAL5.INFO

Syslog message: LOCAL5.INFO: Mar 22 12:31:03 sbmelmac-06390.local INFO App au.com.App Started App in 11.292 seconds (JVM running for 29.336) 

Die syslog-Header erforderlich sind (in der syslog conf) zu Leiten Sie die Protokollnachrichten an die richtigen Dateien weiter, ohne dass ich die Protokolleinträge anhand von Einrichtungsfiltern herausfiltern kann.

Ich verwende SpringBoot (1.2.7), (das logback verwendet 1.1.3), Apache Kamel (2.16.1) und logstash-logback-Encoder (4.6)

Wenn ich im Debug führen Sie es sieht so aus, als ob die SyslogStartConverter.convert-Methode nie aufgerufen wird.

Prost Roy

Antwort

0

Nach viel Kopf kratzen es sieht aus wie es ein Problem mit der Verpackung LayoutWrappingEncoder Teil des Beispiels ist.

Wenn ich die neuste SpringBoot-Version verwende, stoppt eine Logback-Konfigurations-Ausnahme das Starten der App (frühere Versionen stoppten den Start der App nicht, obwohl die Ausnahme ausgelöst wurde).

Application startup failed 
java.lang.IllegalStateException: Logback configuration error detected: 
ERROR in [email protected] - A "ch.qos.logback.core.encoder.LayoutWrappingEncoder" object is not assignable to a "ch.qos.logback.core.Layout" variable. 
ERROR in [email protected] - The class "ch.qos.logback.core.Layout" was loaded by 
ERROR in [email protected] - [[email protected]] whereas object of type 
ERROR in [email protected] - "ch.qos.logback.core.encoder.LayoutWrappingEncoder" was loaded by [[email protected]]. 

so, wenn ich die Verpackung LayoutWrappingEncoder entfernen und eine Muster-Implementierung im Präfix verwendet werden, der Code funktioniert, und ich sehe die richtigen Einzelheiten zu den Einrichtungen in den syslog-Header.

<conversionRule conversionWord="syslogStart" converterClass="ch.qos.logback.classic.pattern.SyslogStartConverter"/> 
<appender name="JSON_SYSLOG" class="net.logstash.logback.appender.LogstashSocketAppender"> 
    <host>127.0.0.1</host> 
    <port>514</port> 
    <prefix class="ch.qos.logback.classic.PatternLayout"> 
     <pattern>%syslogStart{LOCAL5}</pattern> 
    </prefix> 
    </appender> 

und die daraus resultierenden wireshark-Pakete haben die Möglichkeit, Informationen (LOCAL5.INFO | ERROR)

[truncated]Syslog message: LOCAL5.INFO: Mar 22 14:12:18 sbmelmac-06390.local {"@timestamp":"2016-03-22T14:12:18.494+11:00","@version":1,"message":"Started App in 4.597 seconds (JVM running for 5.18)","logger":"au.com.myapp. 
Verwandte Themen