private void appendStructuredElements(final StringBuilder buffer, final LogEvent event) { final Message message = event.getMessage(); final boolean isStructured = message instanceof StructuredDataMessage; if (!isStructured && (fieldFormatters != null && fieldFormatters.isEmpty()) && !includeMdc) { buffer.append('-'); return; } final Map<String, StructuredDataElement> sdElements = new HashMap<String, StructuredDataElement>(); final Map<String, String> contextMap = event.getContextMap(); if (mdcRequired != null) { checkRequired(contextMap); } if (fieldFormatters != null) { for (final Map.Entry<String, FieldFormatter> sdElement : fieldFormatters.entrySet()) { final String sdId = sdElement.getKey(); final StructuredDataElement elem = sdElement.getValue().format(event); sdElements.put(sdId, elem); } } if (includeMdc && contextMap.size() > 0) { if (sdElements.containsKey(mdcSdId.toString())) { final StructuredDataElement union = sdElements.get(mdcSdId.toString()); union.union(contextMap); sdElements.put(mdcSdId.toString(), union); } else { final StructuredDataElement formattedContextMap = new StructuredDataElement(contextMap, false); sdElements.put(mdcSdId.toString(), formattedContextMap); } } if (isStructured) { final StructuredDataMessage data = (StructuredDataMessage) message; final Map<String, String> map = data.getData(); final StructuredDataId id = data.getId(); final String sdId = getId(id); if (sdElements.containsKey(sdId)) { final StructuredDataElement union = sdElements.get(id.toString()); union.union(map); sdElements.put(sdId, union); } else { final StructuredDataElement formattedData = new StructuredDataElement(map, false); sdElements.put(sdId, formattedData); } } if (sdElements.isEmpty()) { buffer.append('-'); return; } for (final Map.Entry<String, StructuredDataElement> entry : sdElements.entrySet()) { formatStructuredElement(entry.getKey(), mdcPrefix, entry.getValue(), buffer, checker); } }