0

Java günlüklerini JSON biçimindeki Syslog dosyasına kaydetmeye çalışıyorum ancak Syslog başlığının beklendiği gibi ayarlanmadığı garip bir sorunla karşılaştım.logback loger kodlayıcı günlüğü Syslog başlığı ayarlanmadı

Bir Mac üzerinde bu test ve onlar (geri döngü arayüzü üzerinden) UDP 514 portuna gönderilen kurtulmaz paketleri

Benim logback.xml aşağıdaki gibidir kapmak için wireshark kullanıyorum:

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

ve ben wireshark çıkışında baktığınızda sadece JSON (bkz verilen hiçbir PRI başlık alanı)

[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 

Ben standart logback Günlüğü appender geçerseniz (non JSON Login çıkış) Doğru başlık tesis ham değeri < 174> bkz yapmak ve değerler syslog Konfigürasyon (günlüğü başlık gereklidir Wireshark paketlerinin

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) 

içinde LOCAL5.INFO ayrıştırıldı

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

) için günlük mesajlarını doğru dosyalara yönlendirin, bu sayede tesis filtrelerine dayalı olarak günlük girişlerini filtreleyemiyorum.

I (logback 1.1.3 kullanır) SpringBoot (1.2.7), apache deve (2.16.1) ve logstash-logback-kodlayıcı kullanıyorum (4.6)

ben hata ayıklama koşmak o SyslogStartConverter.convert yöntemi hiç çağrılmadı gibi görünüyor. başın bir sürü sonra Alkış Roy

cevap

0

örneğin sarma LayoutWrappingEncoder kısmı ile ilgili bir sorun var gibi görünüyor kaşıma.

En son SpringBoot sürümünü kullandığımda, bir günlüğe kaydetme yapılandırması istisnası, uygulamanın başlatılmasını durdurur (önceki sürümler, istisna kaldırılmış olsa bile uygulamanın başlatılmasını durdurmadı). Ben sarma LayoutWrappingEncoder çıkarıp önek bir Desen uygulamasını kullanıyorsanız

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

böylece, kod çalışır ve ben syslog başlıklarda doğru Tesis detaylarını görmek. (| HATA LOCAL5.INFO)

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

ve elde Wireshark paketleri Tesis bilgiye sahip