I think that the current JSONLayout format is unfortunate, and I would prefer to have it as you propose. But we cannot change it now since that will break backwards compatibility.
See: https://issues.apache.org/jira/browse/LOG4J2-623 Perhaps GELFLayout would work better for you. On Mon, Jan 4, 2016 at 10:00 PM, Gary Gregory <[email protected]> wrote: > The point I was trying to make is that you cannot describe what you are > asking for with a generic XML schema, not sure about JSON schema, but the > idea is the same. Since we use Jackson, that also means we use the same > code to emit JSON and XML. > > Gary > On Jan 4, 2016 12:25 PM, "Robin Coe" <[email protected]> wrote: > >> I can see that XML entities requires conforming to a schema but isn't the >> writer implementation capable of wrapping the map entries when required? >> Seems like it's making the JSON representation more complex (and less >> performant) at the cost of some wrapper code for the xml writer. >> >> On Mon, Jan 4, 2016 at 3:19 PM, Gary Gregory <[email protected]> >> wrote: >> >>> Yes, that is because we can define this kind of structure with XML/JSON >>> schema with ease. >>> >>> Gary >>> On Jan 4, 2016 11:55 AM, "Robin Coe" <[email protected]> wrote: >>> >>>> I was trying to deserialize a log event written by the JSONLayout >>>> appender, which uses Jackson. I therefore also am using Jackson but with >>>> the MrBeanModule, which is a POJO materializer. After much difficulty with >>>> Jackson throwing deserialization exceptions with the "contextMap" field, I >>>> learned that the map is actually written out as a List of Maps (i.e. >>>> List<Map<String,String>>. I've included one such event here, with >>>> unnecessary fields shortened: >>>> >>>> >>>> {"timeMillis":...,"thread":"...","level":"OFF","loggerName":"...","message":"...","endOfBatch":false,"loggerFqcn":"...","contextMap":[{"key":"LOGROLL","value":"com.xxx.xxx.handler.event.FailoverHandler"},{"key":"ROUTINGKEY","value":"elasticsearch-rollover"}]} >>>> >>>> I'm curious why the contextMap is represented as the more complex List >>>> of single entry Maps, as opposed to a single multi-valued Map? So, instead >>>> of something that looks like: >>>> >>>> >>>> {"contextMap":[{"key":"key1"},{"value":"value1"},{"key":"key2"},{"value":"value2"},...] >>>> >>>> I would expect the much simpler (and easily parseable): >>>> {"contextMap":{"key1":"value1","key2":"value2",...}. >>>> >>>> Is this intended? >>>> >>>> Thanks, >>>> Robin. >>>> >>> >> -- [image: MagineTV] *Mikael Ståldal* Senior software developer *Magine TV* [email protected] Grev Turegatan 3 | 114 46 Stockholm, Sweden | www.magine.com Privileged and/or Confidential Information may be contained in this message. If you are not the addressee indicated in this message (or responsible for delivery of the message to such a person), you may not copy or deliver this message to anyone. In such case, you should destroy this message and kindly notify the sender by reply email.
