log42j и формат вывода syslog-ng

моя конфигурация syslog-ng:

source s_src { tcp(ip(127.0.0.1) port(1000)); };
destination df_local0 { file ("/var/log/mylog-${YEAR}.${MONTH}.${DAY}.log" template("${YEAR}${MONTH}${DAY}-${HOUR}${MIN}${SEC} ${MESSAGE}\n")); };
filter f_local0 { facility(local0);};
log { source(s_src); filter(f_local0); destination(df_local0);};

мой log4j2.xml

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn" name="MyAppx" packages="">
<Appenders>
    <Syslog name="RFC5424" format="RFC5424" host="127.0.0.1" port="1000"
            protocol="TCP" appName="app" mdcId="mdc" includeMDC="true"
            facility="LOCAL0" enterpriseNumber="" newLine="true" immediateFail="false"
            messageId="" id="" ignoreExceptions="true">
    <PatternLayout pattern="%d{HHmmss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
     <LoggerFields>
        <KeyValuePair key="level" value="%level"/>
        <KeyValuePair key="location" value="%location"/>
        <KeyValuePair key="ex" value="%ex"/>
         </LoggerFields>
</Syslog>
</Appenders>
<Loggers>
    <Root level="debug">
        <AppenderRef ref="RFC5424" />
    </Root>
</Loggers>
</Configuration>

мой вывод syslog-ng:

20150518-151925 2015-05-18T15:19:25.546+02:00 node001-NT-A2400-NT-A3500 app -  [mdc@18060 ex="" level="DEBUG" location="eu.test.prot.ads.ADSClient.run(ADSClient.java:431)"] Thread top

как вы можете видеть, по умолчанию в этом формате есть метка времени

2015-05-18T15:19:25.546+02:00

также печатается имя хоста. Как я могу повлиять на результат?

Есть ли также возможность получить доступ к log4j LoggerFields в syslog-ng.conf?

Я хотел бы иметь вывод, как

20150518-151925 - app - DEBUG - eu.test.prot.ads.ADSClient.run(ADSClient.java:431)" - Thread top

person user2071938    schedule 18.05.2015    source источник


Ответы (1)


Я предполагаю, что syslog-ng не распознает метку времени в сообщении log4j и добавляет метку времени.

Кроме того, в вашей конфигурации syslog-ng вы используете источник tcp(), который в основном используется для получения сообщений RFC3164, но в log4j вы устанавливаете format="RFC5424". Попробуйте изменить конфигурацию syslog-ng, чтобы использовать источник syslog(): https://www.balabit.com/sites/default/files/documents/syslog-ng-ose-latest-guides/en/syslog-ng-ose-guide-admin/html/configuring-sources-syslog.html

С уважением,

Роберт Фекете

person Robert Fekete    schedule 20.05.2015