我正在尝试使用logstash documentation将特定于事件的字段添加到一个记录器语句中。我的记录器语句如下:
LOGGER.info("Executed REST request time={}ms", StructuredArguments.value("request_time_ms", elapsedTimeMs));
根据文档:
如果使用LogstashEncoder / Layout或将复合编码器/布局与参数provider一起使用,则StructuredArguments将包含在JSON输出中
这意味着只要我使用StructuredArguments
,LogstashEncoder
就可以正常工作:
<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"
}
答案 0 :(得分:2)
在您显式添加StructuredArguments
之前,即使您使用LogstashEncoder
,似乎ArgumentsJsonProvider
也不会包含在JSON中:
<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"
}