Ich habe eine logback.groovy, die Daten an ein logstash im Netzwerk mit einigen benutzerdefinierten Feldern sendet:Logback.groovy LogstashEncoder Ändern Feldnamen
appender("LOGSTASH", LogstashTcpSocketAppender) {
encoder(LogstashEncoder) {
customFields = """{ "token": "xxxxx", "environment":"dev", "some_property":"foobar" }"""
}
remoteHost = "logstashlistener.host.name"
port = 5000
}
So weit so gut. Allerdings muss ich einige Feldnamen bereinigen, die für elasticsearch downstream nicht gültig sind. Basierend auf der LogstashEncoder Dokumentation kann dies wie folgt erreicht werden:
<encoder class="net.logstash.logback.encoder.LogstashEncoder">
<fieldNames>
<timestamp>time</timestamp>
<message>msg</message>
...
</fieldNames>
</encoder>
Dies scheint groß, aber ich habe diese in die logback.groovy Notation passen. Ich habe versucht, wie eine hashmap, string und mehr, aber immer am Ende mit Cannot cast object 'xxxx' with class 'xxxx' to class 'net.logstash.logback.fieldnames.LogstashFieldNames'
Interessante Antwort. Leider funktioniert es nicht wirklich. Die FieldNames existieren nicht per se. Ich konvertierte das in LogstashFieldNames und passte das ... an (was einen Kompilierungsfehler ergibt), aber es beschwert sich, dass es die timestamp-Eigenschaft dieser Klasse nicht setzen kann. –