Logstash-logback 特定于事件的自定义字段(使用 StructuredArguments)不会添加到 JS



我正在尝试使用 logstash 文档将特定于事件的字段添加到其中一个记录器语句中。我的记录器语句如下:

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

根据文档:

如果使用 LogstashEncoder/Layout,或者将复合编码器/布局与参数提供程序一起使用,则结构化参数将包含在 JSON 输出中

这意味着只要我使用LogstashEncoderStructuredArguments就应该可以正常工作:

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

但输出 JSON 中仍然缺少request_time_ms

{
"@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"
}

即使您使用LogstashEncoder,似乎StructuredArguments也不会包含在 JSON 中,直到您明确添加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"
}

最新更新