Gibt es ein Protokolllayout, das JSON-Objekte mit Nachrichtenparametern als Attribute erstellt?
Ich möchte Log-Ereignisse als JSON-Objekte mit parametrisierten String-Meldungen an Loggly senden. Unser Projekt hat derzeit eine Menge Code, der so aussieht:
String someParameter = "1234";
logger.log("This is a log message with a parameter {}", someParameter);
Wir verwenden derzeit Logback als SLF4J-Backend und LogbacksJsonLayout um unsere ILogEvent-Objekte in JSON zu serialisieren. Folglich sehen unsere Protokollereignisse zu dem Zeitpunkt, an dem sie an Loggly gesendet werden, folgendermaßen aus:
{
"message": "This is a log message with a parameter 1234",
"level": INFO,
....
}
Während dies funktioniert, sendet es eine anderemessage
Zeichenfolge für jeden Wert vonsomeParameter
, was die automatischen Filter von Loggly so gut wie unbrauchbar macht.
Stattdessen hätte ich gerne ein Layout, das JSON wie folgt erstellt:
{
"message": "This is a log message with a parameter {}",
"level": INFO,
"parameters": [
"1234"
]
}
Mit diesem Format kann Loggly alle Protokollereignisse mit der Nachricht gruppierenThis is a log message with a parameter
zusammen, unabhängig vom Wert vonsomeParameter
.
Es sieht aus wieLogstashs KV-Filter Hat so etwas zu tun? Gibt es eine Möglichkeit, diese Aufgabe mit Logback auszuführen, abgesehen davon, dass ich ein eigenes Layout schreibe, das eine benutzerdefinierte Serialisierung des ILogEvent-Objekts durchführt?