You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by rp...@apache.org on 2016/09/11 06:27:49 UTC

[08/50] logging-log4j2 git commit: LOG4J2-1349 let DefaultThreadContextMap implement the ContextData interface. This results in a much more efficiently performing implementation of the new ContextDataInjector::rawContextData() method introduced in LOG4J2

LOG4J2-1349 let DefaultThreadContextMap implement the ContextData interface. This results in a much more efficiently performing implementation of the new ContextDataInjector::rawContextData() method introduced in LOG4J2-1010.


Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/def057ff
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/def057ff
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/def057ff

Branch: refs/heads/master
Commit: def057ff0bab9054a80cfee9d7b408c28fe6a4bd
Parents: 1600bb2
Author: rpopma <rp...@apache.org>
Authored: Mon Aug 29 00:32:39 2016 +0900
Committer: rpopma <rp...@apache.org>
Committed: Mon Aug 29 00:32:39 2016 +0900

----------------------------------------------------------------------
 .../log4j/spi/DefaultThreadContextMap.java      | 44 +++++++++++++++++++-
 1 file changed, 43 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/def057ff/log4j-api/src/main/java/org/apache/logging/log4j/spi/DefaultThreadContextMap.java
----------------------------------------------------------------------
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/spi/DefaultThreadContextMap.java b/log4j-api/src/main/java/org/apache/logging/log4j/spi/DefaultThreadContextMap.java
index b659c19..0bd100c 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/spi/DefaultThreadContextMap.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/spi/DefaultThreadContextMap.java
@@ -20,7 +20,9 @@ import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 
+import org.apache.logging.log4j.util.BiConsumer;
 import org.apache.logging.log4j.util.PropertiesUtil;
+import org.apache.logging.log4j.util.TriConsumer;
 
 /**
  * The actual ThreadContext Map. A new ThreadContext Map is created each time it is updated and the Map stored is always
@@ -28,7 +30,7 @@ import org.apache.logging.log4j.util.PropertiesUtil;
  * expected that the Map will be passed to many more log events than the number of keys it contains the performance
  * should be much better than if the Map was copied for each event.
  */
-public class DefaultThreadContextMap implements ThreadContextMap2 {
+public class DefaultThreadContextMap implements ThreadContextMap2, ContextData {
 
     /**
      * Property name ({@value} ) for selecting {@code InheritableThreadLocal} (value "true") or plain
@@ -113,12 +115,46 @@ public class DefaultThreadContextMap implements ThreadContextMap2 {
     }
 
     @Override
+    public Map<String, String> asMap() {
+        return getCopy();
+    }
+
+    @Override
     public boolean containsKey(final String key) {
         final Map<String, String> map = localMap.get();
         return map != null && map.containsKey(key);
     }
 
     @Override
+    public <V> void forEach(final BiConsumer<String, ? super V> action) {
+        final Map<String, String> map = localMap.get();
+        if (map == null) {
+            return;
+        }
+        for (Map.Entry<String, String> entry : map.entrySet()) {
+            action.accept(entry.getKey(), (V) entry.getValue());
+        }
+    }
+
+    @Override
+    public <V, S> void forEach(final TriConsumer<String, ? super V, S> action, final S state) {
+        final Map<String, String> map = localMap.get();
+        if (map == null) {
+            return;
+        }
+        for (Map.Entry<String, String> entry : map.entrySet()) {
+            action.accept(entry.getKey(), (V) entry.getValue(), state);
+        }
+    }
+
+    @SuppressWarnings("unchecked")
+    @Override
+    public <V> V getValue(final String key) {
+        final Map<String, String> map = localMap.get();
+        return (V) (map == null ? null : map.get(key));
+    }
+
+    @Override
     public Map<String, String> getCopy() {
         final Map<String, String> map = localMap.get();
         return map == null ? new HashMap<String, String>() : new HashMap<>(map);
@@ -136,6 +172,12 @@ public class DefaultThreadContextMap implements ThreadContextMap2 {
     }
 
     @Override
+    public int size() {
+        final Map<String, String> map = localMap.get();
+        return map == null ? 0 : map.size();
+    }
+
+    @Override
     public String toString() {
         final Map<String, String> map = localMap.get();
         return map == null ? "{}" : map.toString();