Пользовательские поля, зависящие от события logstash-logback (с использованием StructuredArguments), не добавляются в JSON - PullRequest
0 голосов
/ 20 сентября 2018

Я пытаюсь добавить поле, относящееся к событию, к одному из операторов регистратора, используя документацию logstash .Мой логгер выглядит следующим образом:

LOGGER.info("Executed REST request time={}ms", StructuredArguments.value("request_time_ms", elapsedTimeMs));

Согласно документации:

StructuredArguments будет включен в вывод JSON при использовании LogstashEncoder / Layout или при использованиисоставные кодировщики / макеты с поставщиком аргументов

Это означает, что StructuredArguments должно работать нормально для меня, пока я использую LogstashEncoder:

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder class="net.logstash.logback.encoder.LogstashEncoder">
    </encoder>
</appender>

Но все же request_time_ms отсутствует в выводе JSON:

{
    "@timestamp": "2018-09-20T14:00:43.560+03:00",
    "@version": 1,
    "appname": "my_app",
    "level": "INFO",
    "level_value": 20000,
    "logger_name": "com.example.MetricsAspect",
    "message": "Executed REST request time=258ms",
    "thread_name": "main"
}

1 Ответ

0 голосов
/ 20 сентября 2018

Похоже, что StructuredArguments не будет включено в JSON, даже если вы используете LogstashEncoder, пока не добавите явно ArgumentsJsonProvider:

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder class="net.logstash.logback.encoder.LogstashEncoder">
        <provider class="net.logstash.logback.composite.loggingevent.ArgumentsJsonProvider"/>
    </encoder>
</appender>

Теперь все работает как положено:

{
    "@timestamp": "2018-09-20T15:43:11.019+03:00",
    "@version": 1,
    "appname": "my_app",
    "level": "INFO",
    "level_value": 20000,
    "logger_name": "com.example.MetricsAspect",
    "message": "Executed REST request time=337ms",
    "request_time_ms": 337,
    "thread_name": "main"
}
...