Details
-
Improvement
-
Status: Closed
-
Minor
-
Resolution: Not A Problem
-
None
-
None
-
None
Description
Currently, if a user's object is able to generate well-formed JSON string, it will be escaped. It would be great if there was a way to config the JsonTemplateLayout to not escape certain payloads. This allows the json to be fully formed and contain model object data that can be parsed out later without any un-formatting.
Example log entry:
{"@timestamp":"2022-01-07T19:14:01.060Z","log.level":"INFO","message":"{ \"Order\" { \"id\": \"3977\", \"customerName\": \"Customer-8625\", \"createdDate\": \"2022-01-07T09:51:01.056580-06:00\"} }","process.thread.name":"main","log.logger":"io.foo.log.ProcessService"}
Desired output:
{"@timestamp":"2022-01-07T19:14:01.060Z","log.level":"INFO","message":{ "Order" { "id": "3977", "customerName": "Customer-8625", "createdDate": "2022-01-07T09:51:01.056580-06:00"} },"process.thread.name":"main","log.logger":"io.foo.log.ProcessService"}
Proposed requirements:
1. Users would have to pre-escape their JSON string in order to not break overall log json format
Implementation approach options:
1. Update JSONTemplate configuration to allow a rawJSON, similar to 'stringified'
2. Data is written down as a JSON object "message": { }
3. User should invoke using an ObjectMessage (or perhaps a JSONFormatMessage?): logger.info(new ObjectMessage(objectInstance))
"message": { "$resolver": "message", "rawJSON": true },