Spring boot 未设置logback logstash编码器Syslog头

Spring boot 未设置logback logstash编码器Syslog头,spring-boot,apache-camel,logback,syslog,logstash-logback-encoder,Spring Boot,Apache Camel,Logback,Syslog,Logstash Logback Encoder,我试图以JSON格式将Java日志记录到Syslog,但我发现一个奇怪的问题,Syslog头没有按预期设置 我正在Mac上测试这一点,并使用wireshark在数据包被发送到UDP 514端口(通过环回接口)时抓取数据包 我的logback.xml如下: <?xml version="1.0" encoding="UTF-8"?> <configuration> <conversionRule conversionWord="syslogStart" conve

我试图以JSON格式将Java日志记录到Syslog,但我发现一个奇怪的问题,Syslog头没有按预期设置

我正在Mac上测试这一点,并使用wireshark在数据包被发送到UDP 514端口(通过环回接口)时抓取数据包

我的logback.xml如下:

<?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>
如果我切换到标准的logback Syslog appender(非JSON输出)

需要syslog头(在syslog conf中)将日志消息路由到正确的文件,因此如果没有这个头,我就无法根据设施过滤器筛选出日志条目

我正在使用SpringBoot(1.2.7)(它使用logback 1.1.3)、ApacheCamel(2.16.1)和logstash logback编码器(4.6)

在调试中运行时,似乎从未调用SyslogStartConverter.convert方法

干杯
Roy

在经历了大量的挠头之后,这个例子中的包装布局WrappingCoder部分似乎出现了问题

当我使用最新的SpringBoot版本时,logback配置异常会阻止应用程序启动(即使引发异常,以前的版本也不会阻止应用程序启动)

因此,如果我删除包装布局包装代码并在前缀中使用模式实现,代码就会正常工作,并且我会在syslog头中看到正确的设施详细信息

 <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>
...
  <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>
...
 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)
Application startup failed
java.lang.IllegalStateException: Logback configuration error detected: 
ERROR in ch.qos.logback.core.joran.util.PropertySetter@10d307f1 - A "ch.qos.logback.core.encoder.LayoutWrappingEncoder" object is not assignable to a "ch.qos.logback.core.Layout" variable.
ERROR in ch.qos.logback.core.joran.util.PropertySetter@10d307f1 - The class "ch.qos.logback.core.Layout" was loaded by 
ERROR in ch.qos.logback.core.joran.util.PropertySetter@10d307f1 - [sun.misc.Launcher$AppClassLoader@73d16e93] whereas object of type 
ERROR in ch.qos.logback.core.joran.util.PropertySetter@10d307f1 - "ch.qos.logback.core.encoder.LayoutWrappingEncoder" was loaded by [sun.misc.Launcher$AppClassLoader@73d16e93].
 <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>
 [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.