in log4j-core/src/main/java/org/apache/logging/log4j/core/layout/Rfc5424Layout.java [363:418]
private void appendStructuredElements(final StringBuilder buffer, final LogEvent event) {
final Message message = event.getMessage();
final boolean isStructured = message instanceof StructuredDataMessage ||
message instanceof StructuredDataCollectionMessage;
if (!isStructured && (fieldFormatters != null && fieldFormatters.isEmpty()) && !includeMdc) {
buffer.append('-');
return;
}
final Map<String, StructuredDataElement> sdElements = new HashMap<>();
final Map<String, String> contextMap = event.getContextData().toMap();
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) {
final String mdcSdIdStr = mdcSdId.toString();
final StructuredDataElement union = sdElements.get(mdcSdIdStr);
if (union != null) {
union.union(contextMap);
sdElements.put(mdcSdIdStr, union);
} else {
final StructuredDataElement formattedContextMap = new StructuredDataElement(contextMap, mdcPrefix, false);
sdElements.put(mdcSdIdStr, formattedContextMap);
}
}
if (isStructured) {
if (message instanceof MessageCollectionMessage) {
for (final StructuredDataMessage data : ((StructuredDataCollectionMessage)message)) {
addStructuredData(sdElements, data);
}
} else {
addStructuredData(sdElements, (StructuredDataMessage) message);
}
}
if (sdElements.isEmpty()) {
buffer.append('-');
return;
}
for (final Map.Entry<String, StructuredDataElement> entry : sdElements.entrySet()) {
formatStructuredElement(entry.getKey(), entry.getValue(), buffer, listChecker);
}
}