Я пытаюсь записывать журналы Java в Syslog в формате JSON, но обнаружил странную проблему, когда заголовок 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
Если я переключусь на стандартное приложение Syslog logback (не вывод 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-encoder (4.6).
Когда я запускаю отладку, похоже, что метод SyslogStartConverter.convert никогда не вызывается.
Привет Рой