0

Я пытаюсь зарегистрировать журналы Java в Syslog в формате JSON, но я обнаружил странную проблему, когда заголовок Syslog не настроен так, как ожидалось.loglog logstash encoder Заголовок журнала 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> 

и когда я смотрю на выходе Wireshark я вижу только JSON не будучи зарегистрированным (не PRI поле заголовка заданного)

[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 

Если переключиться на стандартный Logback Syslog Appender (не в формате JSON выход)

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

я увидеть правильный объект заголовка необработанного значения < 174> и проанализирован значение LOCAL5.INFO в 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) 

требуется заголовок системного журнала (в конфе системного журнала), чтобы направьте сообщения журнала на правильные файлы, поэтому без этого я не могу отфильтровать записи журнала на основе фильтров объектов.

Я использую SpringBoot (1.2.7), (который использует Logback 1.1.3), Apache Camel (2.16.1) и logstash-Logback-кодер (4,6)

Когда я бегу в отладить похоже, что метод SyslogStartConverter.convert никогда не вызывается.

Приветствия Рой

ответ

0

После много царапины на голове, похоже, это проблема с оберточной LayoutWrappingEncoder части примера.

Когда я использую последнюю версию SpringBoot, исключение конфигурации журнала блокировки приостанавливает запуск приложения (предыдущие версии не остановили запуск приложения, даже если исключение было поднято).

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

так, если я удалить оберточной LayoutWrappingEncoder и использовать реализацию паттерна в префиксе, код работает, и я вижу правильные данные объекта в заголовках системного журнала.

<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 информацию объекта (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. 
Смежные вопросы