[ 
https://issues.apache.org/jira/browse/LOG4J2-3298?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17471603#comment-17471603
 ] 

Matt Pavlovich edited comment on LOG4J2-3298 at 1/9/22, 11:01 PM:
------------------------------------------------------------------

[~vy] not really. the mdc approach with a few fields specified is suitable for 
the diagnostic logging scenario -- "hey this occurred to this piece of data".  

For full data audit logging, we are looking to log the full data model and have 
the log message be fully formed JSON. Then the log message entry itself is 
readily unmarshable by various languages, frameworks etc.

How do you feel about a PR with a JSONMessage object?

{noformat}
logger.info(new JSONMessage(object)); // where object.toString() generates 
valid JSON, or the constructor takes a string
{noformat}

Design:
1. Define a global system property to disable JSONMessage using 
writeRawString() (ie -DjsonMessageDisabled="true")
2. JTL / JSONWriter inspects for JSONMessage and !jsonMessageDisabled
3. JTL / JSONWriter uses writeRawStrin

Benefits:
1. A Global flag to disable the feature
2. The feature is "domain aligned" with using JTL, as the JSONMessage object is 
not available outside using the JTL jar





was (Author: mattrpav):
[~vy] not really. the mdc approach with a few fields specified is suitable for 
the diagnostic logging scenario -- "hey this occurred to this piece of data".  
For full data audit logging, we are looking to log the full data model and have 
the log message be fully formed JSON. Then the log message entry itself is 
readily unmarshable by various languages, frameworks etc.

How do you feel about a PR with a JSONMessage object?

{noformat}
logger.info(new JSONMessage(object)); // where object.toString() generates 
valid JSON, or the constructor takes a string
{noformat}

Design:
1. Define a global system property to disable JSONMessage using 
writeRawString() (ie -DjsonMessageDisabled="true")
2. JTL / JSONWriter inspects for JSONMessage and !jsonMessageDisabled
3. JTL / JSONWriter uses writeRawStrin

Benefits:
1. A Global flag to disable the feature
2. The feature is "domain aligned" with using JTL, as the JSONMessage object is 
not available outside using the JTL jar




> Update JSONTemplateFormat to support not escaping certain payloads
> ------------------------------------------------------------------
>
>                 Key: LOG4J2-3298
>                 URL: https://issues.apache.org/jira/browse/LOG4J2-3298
>             Project: Log4j 2
>          Issue Type: Improvement
>          Components: JsonTemplateLayout
>            Reporter: Matt Pavlovich
>            Assignee: Volkan Yazici
>            Priority: Minor
>
> 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:
> {noformat}
> {"@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"}
> {noformat}
> Desired output:
> {noformat}
> {"@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"}
> {noformat}
> 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))
> {noformat}
> "message": {
>     "$resolver": "message",
>     "rawJSON": true
>   },
> {noformat}



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

Reply via email to