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;
     }
 

Reply via email to