ho un logback.groovy che invia i dati a un logstash in rete con alcuni campi personalizzati:Logback.groovy LogstashEncoder nomi dei campi che alterano
appender("LOGSTASH", LogstashTcpSocketAppender) {
encoder(LogstashEncoder) {
customFields = """{ "token": "xxxxx", "environment":"dev", "some_property":"foobar" }"""
}
remoteHost = "logstashlistener.host.name"
port = 5000
}
Fin qui tutto bene. Tuttavia, ho bisogno di pulire alcuni nomi di campi che non sono validi per elasticsearch a valle. Sulla base della documentazione LogstashEncoder, questo può essere realizzato in questo modo:
<encoder class="net.logstash.logback.encoder.LogstashEncoder">
<fieldNames>
<timestamp>time</timestamp>
<message>msg</message>
...
</fieldNames>
</encoder>
Questo sembra grande, ma devo inserire questo in notazione logback.groovy. Ho provato come hashmap, stringa e altro ma sempre finiscono con Cannot cast object 'xxxx' with class 'xxxx' to class 'net.logstash.logback.fieldnames.LogstashFieldNames'
Risposta interessante. Purtroppo, non funziona davvero. Il FieldNames non esiste di per sé. L'ho convertito in LogstashFieldNames e adattato il ... (che dà un errore di compilazione) ma si lamenta che non può impostare la proprietà timestamp di quella classe. –