Ich habe eine logback.groovy, die Daten an ein logstash im Netzwerk mit einigen benutzerdefinierten Feldern sendet:
%Vor%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:
%Vor% Das scheint großartig, aber ich muss das in die logback.groovy Notation einfügen.
Ich habe es als hashmap, string und mehr versucht, aber immer mit Cannot cast object 'xxxx' with class 'xxxx' to class 'net.logstash.logback.fieldnames.LogstashFieldNames'
Ich musste etwas ähnliches tun, obwohl ich den LoggingEventCompositeJsonEncoder
Encoder verwendet habe.
Der Ansatz, den ich verwenden musste, besteht darin, den logstash-logback-encoder-Code zu durchforsten, um die realen Klassen zu ermitteln. Glücklicherweise macht IntelliJs Decompiler dies nicht zu schmerzhaft.
Wenn Sie sich LogstashEncoder ansehen, hat er eine Methode public void setFieldNames(LogstashFieldNames fieldNames)
- also brauchen Sie eine Instanz von LogstashFieldNames
LogstashFieldNames wiederum hat Setter für setTimestamp
und den Rest, also sollte groovy Ihre Syntax lauten:
Tags und Links groovy logstash logstash-logback-encoder