in log4j-core/src/main/java/org/apache/logging/log4j/core/layout/GelfLayout.java [673:753]
private StringBuilder toText(final LogEvent event, final StringBuilder builder, final boolean gcFree) {
builder.append('{');
builder.append("\"version\":\"1.1\",");
builder.append("\"host\":\"");
JsonUtils.quoteAsString(toNullSafeString(host), builder);
builder.append(QC);
builder.append("\"timestamp\":")
.append(formatTimestamp(event.getTimeMillis()))
.append(C);
builder.append("\"level\":").append(formatLevel(event.getLevel())).append(C);
if (event.getThreadName() != null) {
builder.append("\"_thread\":\"");
JsonUtils.quoteAsString(event.getThreadName(), builder);
builder.append(QC);
}
if (event.getLoggerName() != null) {
builder.append("\"_logger\":\"");
JsonUtils.quoteAsString(event.getLoggerName(), builder);
builder.append(QC);
}
if (additionalFields.length > 0) {
final StrSubstitutor strSubstitutor = getConfiguration().getStrSubstitutor();
for (final KeyValuePair additionalField : additionalFields) {
final String value = valueNeedsLookup(additionalField.getValue())
? strSubstitutor.replace(event, additionalField.getValue())
: additionalField.getValue();
if (Strings.isNotEmpty(value) || !omitEmptyFields) {
builder.append(QU);
JsonUtils.quoteAsString(additionalField.getKey(), builder);
builder.append("\":\"");
JsonUtils.quoteAsString(toNullSafeString(value), builder);
builder.append(QC);
}
}
}
if (includeThreadContext) {
event.getContextData().forEach(mdcWriter, builder);
}
if (includeMapMessage && event.getMessage() instanceof MapMessage) {
((MapMessage<?, Object>) event.getMessage()).forEach((key, value) -> mapWriter.accept(key, value, builder));
}
if (event.getThrown() != null || layout != null) {
builder.append("\"full_message\":\"");
if (layout != null) {
final StringBuilder messageBuffer = getMessageStringBuilder();
layout.serialize(event, messageBuffer);
JsonUtils.quoteAsString(messageBuffer, builder);
} else if (includeStacktrace) {
JsonUtils.quoteAsString(formatThrowable(event.getThrown()), builder);
} else {
JsonUtils.quoteAsString(event.getThrown().toString(), builder);
}
builder.append(QC);
}
builder.append("\"short_message\":\"");
final Message message = event.getMessage();
if (message instanceof CharSequence) {
JsonUtils.quoteAsString(((CharSequence) message), builder);
} else if (gcFree && message instanceof StringBuilderFormattable) {
final StringBuilder messageBuffer = getMessageStringBuilder();
try {
((StringBuilderFormattable) message).formatTo(messageBuffer);
JsonUtils.quoteAsString(messageBuffer, builder);
} finally {
trimToMaxSize(messageBuffer);
}
} else {
JsonUtils.quoteAsString(toNullSafeString(message.getFormattedMessage()), builder);
}
builder.append(Q);
builder.append('}');
if (includeNullDelimiter) {
builder.append(NUL);
}
if (includeNewLineDelimiter) {
builder.append(LF);
}
return builder;
}