0

JavaログをJSON形式でSyslogに記録しようとしていますが、Syslogヘッダーが期待どおりに設定されていないという奇妙な問題が見つかりました。logback logstash encoder syslogヘッダーが設定されていません

彼らはUDP 514ポートに送信されますと、私は次のように私のlogback.xmlがある

(ループバックインタフェースを介して)は、Mac上でこれをテストし、パケットをつかむためのwiresharkを使用しています:

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

私はWiresharkの出力を見ると、私は標準logbackシスログアペンダ(非JSONに切り替えると私は

[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 

(なしPRIヘッダフィールドが与えられていない)JSONが記録されている参照出力)I、正しいヘッダ施設生値< 174>を参照して行うと値がシスログCONFに(syslogのヘッダが必要であるWiresharkのパケット

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) 

にLOCAL5.INFO解析さ

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

)にログメッセージを正しいファイルにルーティングするので、ファシリティフィルタに基づいてログエントリをフィルタリングすることはできません。

私は(logback 1.1.3を使用しています)SpringBoot(1.2.7)、Apacheのラクダ(2.16.1)とlogstash-logback-エンコーダを使用しています(4.6)

私がデバッグで実行することSyslogStartConverter.convertメソッドが呼び出されないように見えます。ヘッドの多くは、それが例のラッピングLayoutWrappingEncoder部分の問題だように見える傷後

乾杯 ロイ

答えて

0

を。

最新のSpringBootバージョンを使用すると、ログバック設定の例外により、アプリケーションの起動が停止します(以前のバージョンでは、例外が発生してもアプリケーションの起動が停止しませんでした)。私はラッピングLayoutWrappingEncoderを削除し、接頭辞でパターンの実装を使用する場合

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

ので、コードが動作し、私は、syslogヘッダーに正しい施設の詳細情報を参照してください。 (| ERROR 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> 

し、得られwiresharkのパケットは、施設情報を持っています
関連する問題