Ich möchte Log-Ereignisse als JSON-Objekte mit parametrisierten String-Nachrichten an Loggly senden. Unser Projekt hat derzeit eine Menge Code, der wie folgt aussieht:Gibt es ein Logback-Layout, das JSON-Objekte mit Nachrichtenparametern als Attribute erstellt?
String someParameter = "1234";
logger.log("This is a log message with a parameter {}", someParameter);
Wir haben zur Zeit Logback als unsere SLF4J Backend verwenden und Logback des JsonLayout unsere ILogEvent Objekte in JSON serialisiert werden. Konsequenter, indem sie unsere Protokollereignisse Loggly ausgeliefert Zeit sehen sie wie folgt aus:
{
"message": "This is a log message with a parameter 1234",
"level": INFO,
....
}
Während dies funktioniert, ist es eine andere message
String für jeden Wert von someParameter
sendet, die Loggly automatische Filter neben unbrauchbar macht .
Stattdessen würde Ich mag einen Plan haben, die JSON erstellt, die wie folgt aussieht:
{
"message": "This is a log message with a parameter {}",
"level": INFO,
"parameters": [
"1234"
]
}
Dieses Format This is a log message with a parameter
zusammen Loggly gruppieren alle Log-Ereignisse mit der Meldung ermöglichen würde, unabhängig von dem Wert von someParameter
.
Es sieht aus wie Logstash's KV filter tut so etwas - gibt es eine Möglichkeit, diese Aufgabe mit Logback zu erreichen, kurz vor dem Schreiben meines eigenen Layout, das benutzerdefinierte Serialisierung des ILogEvent-Objekts führt?
Das Problem, das ich mit Ihrem Beispiel sehe, ist, dass Sie nicht wissen, wo der Parameter in der Nachricht eingefügt werden würde. –
@ LeonardBrünings das sollte nicht wichtig sein, weil die Parameter an die 'log.log (message, param1, param2);' -Funktion übergeben werden. Solange die Reihenfolge in dem Array erhalten bleibt, das in das JSON-Objekt eingefügt wird, ist alles in Ordnung. – MusikPolice
aber Ihre Nachricht in der JSON hatte keine Platzhalter. Wenn das beabsichtigt und nicht ein Fehler wäre, wüssten Sie nicht, wie Sie die richtige Nachricht wiedergeben. –