GitHub user mdvorak opened a pull request:
https://github.com/apache/logging-log4j2/pull/110
JsonLayout support for custom key-value pairs being inserted into JSON
_Note: This is not ready PR, there are no unit tests for new feature -
please review before i'll invest more time into it._
* Changed `AbstractJacksonLayout.convertMutableToLog4jEvent` to `protected
Object wrapLogEvent(LogEvent event)`
* Added Extras as `KeyValuePair[]` to `JsonLayout`
* When extras as specified, `LogEvent` is wrapped in new
`LogEventWithExtras` class, which merges `LogEvent` serialized data with
provided extras
This is generally wanted feature, for example see here:
https://github.com/ggrandes/log4j2-simplejson
https://github.com/majikthys/log4j2-logstash-jsonevent-layout
How it works:
```xml
<JsonLayout>
<KeyValuePair key="hostName" value="${hostName}"/>
</JsonLayout>
```
Inserts into each generated JSON `hostName` key:
```json
{
"timeMillis":1505228896690,
"thread":"main",
"level":"INFO",
"loggerName":"org.springframework....",
"message":"Refreshing ...",
"endOfBatch":false,
"loggerFqcn":"org....",
"contextMap":{},
"threadId":1,
"threadPriority":5,
"hostName":"wp21257b"
}
```
This is accomplished by tricks with Jackon json serializer:
```java
public static class LogEventWithExtras {
// ....
@JsonUnwrapped // Deserializes actual LogEvent into root object
public Object getLogEvent() { return logEvent; }
@JsonAnyGetter // Adds everything from the map into root object
public Map<String, Object> getExtras() { return extras; }
}
```
You can merge this pull request into a Git repository by running:
$ git pull https://github.com/mdvorak/logging-log4j2 jsonlayout-extras29
Alternatively you can review and apply these changes as the patch at:
https://github.com/apache/logging-log4j2/pull/110.patch
To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:
This closes #110
----
commit ba78e4b08727d2ce558120731d40133122a9fb05
Author: Michal Dvorak (cen38289) <[email protected]>
Date: 2017-09-12T12:31:52Z
JsonLayout support for custom key-value pairs being inserted into JSON
Changed AbstractJacksonLayout.convertMutableToLog4jEvent to protected
Object wrapLogEvent(LogEvent event)
Added Extras as KeyValuePair[] to JsonLayout
When extras as specified, LogEvent is wrapped in new LogEventWithExtras
class, which merges LogEvent serialized data with provided extras
----
---