您正在使用一个UDP附加器 https://github.com/logstash/logstash-logback-encoder#udp-appender,并且它没有encoder
。你应该使用TCP附加器 https://github.com/logstash/logstash-logback-encoder#tcp-appenders (LogstashTcpSocketAppender
代替LogstashSocketAppender
):
<appender name="stash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<destination>xx.xx.xx.xx:xxxxx</destination>
<encoder class="net.logstash.logback.encoder.LogstashEncoder">
<includeMdcKeyName>myField</includeMdcKeyName>
</encoder>
</appender>
看看我创建的演示项目here https://gitlab.com/madhead-playgrounds/so53558553.
这段代码 https://gitlab.com/madhead-playgrounds/so53558553/blob/master/src/main/kotlin/by/dev/madhead/playgrounds/so53558553/App.kt#L16-22(科特林):
MDC.put("mdc", "so53558553")
LOG.warn("Warn")
With a logback-spring.xml https://gitlab.com/madhead-playgrounds/so53558553/blob/master/src/main/resources/logback-spring.xml#L3-8像这样:
<appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<destination>localhost:5000</destination>
<encoder class="net.logstash.logback.encoder.LogstashEncoder">
<includeMdcKeyName>mdc</includeMdcKeyName>
</encoder>
</appender>
在 Logstash 中生成这样的记录:
{
"level_value" => 30000,
"mdc" => "so53558553",
"port" => 35450,
"logger_name" => "by.dev.madhead.playgrounds.so53558553.SpringBootConsoleApplication",
"host" => "172.17.0.1",
"@version" => "1",
"@timestamp" => 2018-12-03T01:16:28.793Z,
"thread_name" => "main",
"message" => "Warn",
"level" => "WARN"
}
如你所见,mdc
值被 Logstash 视为LoggingEvent
.
EDIT
由于 ELK 配置错误,您可能在 Kibana 中看不到您的字段。我正在粘贴我的 Logstash pipiline 配置(/etc/logstash/conf.d/01-input.conf
)仅供参考(这是非常基本的):
input {
tcp {
port => 5000
codec => json_lines
}
}
output {
elasticsearch {
hosts => [ "localhost:9200" ]
index => "logback-%{+YYYY.MM.dd}"
}
}
然后我在 Kibana 中配置了日志logback-*
图案:
瞧: