いくつかのカスタム フィールドを使用してネットワーク上のログスタッシュにデータを送信する logback.groovy があります。
appender("LOGSTASH", LogstashTcpSocketAppender) {
encoder(LogstashEncoder) {
customFields = """{ "token": "xxxxx", "environment":"dev", "some_property":"foobar" }"""
}
remoteHost = "logstashlistener.host.name"
port = 5000
}
ここまでは順調ですね。ただし、elasticsearch ダウンストリームでは無効なフィールド名をクリーンアップする必要があります。LogstashEncoder のドキュメントに基づいて、これは次のように実現できます。
<encoder class="net.logstash.logback.encoder.LogstashEncoder">
<fieldNames>
<timestamp>time</timestamp>
<message>msg</message>
...
</fieldNames>
</encoder>
これは素晴らしいようですが、これを logback.groovy 表記に合わせる必要があります。ハッシュマップ、文字列などとして試しましたが、常に最終的にはCannot cast object 'xxxx' with class 'xxxx' to class 'net.logstash.logback.fieldnames.LogstashFieldNames'