LOG4J2-1447 GelfLayout now appends ContextData without generating temporary objects
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/cc72c04c Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/cc72c04c Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/cc72c04c Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure Commit: cc72c04c3bf6076c15cd651f18e75a8867a3b05e Parents: f313f93 Author: rpopma <[email protected]> Authored: Wed Jul 27 01:27:47 2016 +0900 Committer: rpopma <[email protected]> Committed: Wed Jul 27 01:27:47 2016 +0900 ---------------------------------------------------------------------- .../logging/log4j/core/layout/GelfLayout.java | 22 +++++++++++++------- 1 file changed, 14 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/cc72c04c/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/GelfLayout.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/GelfLayout.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/GelfLayout.java index dfa5a8d..9edd36b 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/GelfLayout.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/GelfLayout.java @@ -38,6 +38,7 @@ import org.apache.logging.log4j.core.config.plugins.PluginFactory; import org.apache.logging.log4j.core.net.Severity; import org.apache.logging.log4j.core.util.JsonUtils; import org.apache.logging.log4j.core.util.KeyValuePair; +import org.apache.logging.log4j.core.util.TriConsumer; import org.apache.logging.log4j.message.Message; import org.apache.logging.log4j.status.StatusLogger; import org.apache.logging.log4j.util.StringBuilderFormattable; @@ -208,13 +209,7 @@ public final class GelfLayout extends AbstractStringLayout { JsonUtils.quoteAsString(toNullSafeString(additionalField.getValue()), builder); builder.append(QC); } - for (final Map.Entry<String, String> entry : event.getContextMap().entrySet()) { - builder.append(QU); - JsonUtils.quoteAsString(entry.getKey(), builder); - builder.append("\":\""); - JsonUtils.quoteAsString(toNullSafeString(entry.getValue()), builder); - builder.append(QC); - } + event.getContextData().forEach(WRITE_KEY_VALUES_INTO, builder); if (event.getThrown() != null) { builder.append("\"full_message\":\""); if (includeStacktrace) { @@ -245,6 +240,17 @@ public final class GelfLayout extends AbstractStringLayout { return builder; } + private static final TriConsumer<String, Object, StringBuilder> WRITE_KEY_VALUES_INTO = new TriConsumer<String, Object, StringBuilder>() { + @Override + public void accept(final String key, final Object value, final StringBuilder stringBuilder) { + stringBuilder.append(QU); + JsonUtils.quoteAsString(key, stringBuilder); + stringBuilder.append("\":\""); + JsonUtils.quoteAsString(toNullSafeString(String.valueOf(value)), stringBuilder); + stringBuilder.append(QC); + } + }; + private static final ThreadLocal<StringBuilder> messageStringBuilder = new ThreadLocal<>(); private static StringBuilder getMessageStringBuilder() { @@ -257,7 +263,7 @@ public final class GelfLayout extends AbstractStringLayout { return result; } - private CharSequence toNullSafeString(final CharSequence s) { + private static CharSequence toNullSafeString(final CharSequence s) { return s == null ? Strings.EMPTY : s; }
