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/08/22 15:40:27 UTC

[13/16] logging-log4j2 git commit: LOG4J2-1010, LOG4J2-1447, LOG4J2-1349 use ThreadContextMap for fine-grained context data injection

LOG4J2-1010, LOG4J2-1447, LOG4J2-1349 use ThreadContextMap for fine-grained context data injection


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

Branch: refs/heads/LOG4J2-1349-gcfree-threadcontext
Commit: 24cbcc6a1d2bae5607f6db511f28a00968e7d4aa
Parents: fcb58f1
Author: rpopma <rp...@apache.org>
Authored: Sun Aug 21 10:39:30 2016 +0900
Committer: rpopma <rp...@apache.org>
Committed: Tue Aug 23 00:31:15 2016 +0900

----------------------------------------------------------------------
 ...AbstractCopyOnWriteMutableThreadContext.java |  2 +-
 ...AbstractGarbageFreeMutableThreadContext.java |  2 +-
 .../core/impl/ContextDataInjectorFactory.java   | 17 +++++----
 .../core/impl/ThreadContextDataInjector.java    | 37 ++++++++++----------
 4 files changed, 30 insertions(+), 28 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/24cbcc6a/log4j-api/src/main/java/org/apache/logging/log4j/spi/AbstractCopyOnWriteMutableThreadContext.java
----------------------------------------------------------------------
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/spi/AbstractCopyOnWriteMutableThreadContext.java b/log4j-api/src/main/java/org/apache/logging/log4j/spi/AbstractCopyOnWriteMutableThreadContext.java
index 9837ba8..ffc09ac 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/spi/AbstractCopyOnWriteMutableThreadContext.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/spi/AbstractCopyOnWriteMutableThreadContext.java
@@ -129,7 +129,7 @@ public abstract class AbstractCopyOnWriteMutableThreadContext implements ThreadC
         return map == null ? Collections.<String, String>emptyMap() : map.asMap();
     }
 
-    public ContextData getContextData() {
+    public MutableContextData getContextData() {
         return localMap.get();
     }
 

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/24cbcc6a/log4j-api/src/main/java/org/apache/logging/log4j/spi/AbstractGarbageFreeMutableThreadContext.java
----------------------------------------------------------------------
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/spi/AbstractGarbageFreeMutableThreadContext.java b/log4j-api/src/main/java/org/apache/logging/log4j/spi/AbstractGarbageFreeMutableThreadContext.java
index 7a0e6f8..95dd30a 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/spi/AbstractGarbageFreeMutableThreadContext.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/spi/AbstractGarbageFreeMutableThreadContext.java
@@ -131,7 +131,7 @@ public abstract class AbstractGarbageFreeMutableThreadContext implements ThreadC
         return map == null ? Collections.<String, String>emptyMap() : map.asMap();
     }
 
-    public ContextData getContextData() {
+    public MutableContextData getContextData() {
         return localMap.get();
     }
 

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/24cbcc6a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ContextDataInjectorFactory.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ContextDataInjectorFactory.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ContextDataInjectorFactory.java
index d3da505..fa1c28f 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ContextDataInjectorFactory.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ContextDataInjectorFactory.java
@@ -17,7 +17,10 @@
 package org.apache.logging.log4j.core.impl;
 
 import org.apache.logging.log4j.ThreadContext;
+import org.apache.logging.log4j.ThreadContextAccess;
 import org.apache.logging.log4j.core.LogEvent;
+import org.apache.logging.log4j.spi.AbstractCopyOnWriteMutableThreadContext;
+import org.apache.logging.log4j.spi.AbstractGarbageFreeMutableThreadContext;
 import org.apache.logging.log4j.spi.ContextData;
 import org.apache.logging.log4j.spi.ThreadContextMap;
 import org.apache.logging.log4j.status.StatusLogger;
@@ -69,13 +72,13 @@ public class ContextDataInjectorFactory {
     }
 
     private static ContextDataInjector createDefaultInjector() {
-//        final ThreadContextMap threadContextMap = null; // ThreadContext.getThreadContextMap(); TODO LOG4J2-1349
-//        if (threadContextMap instanceof AbstractCopyOnWriteMutableThreadContext) {
-//            return new ThreadContextDataInjector.ForCopyOnWriteMutableThreadContextMap();
-//        }
-//        if (threadContextMap instanceof AbstractGarbageFreeMutableThreadContext) {
-//            return new ThreadContextDataInjector.ForGarbageFreeMutableThreadContextMap();
-//        }
+        final ThreadContextMap threadContextMap = ThreadContextAccess.getThreadContextMap();
+        if (threadContextMap instanceof AbstractCopyOnWriteMutableThreadContext) {
+            return new ThreadContextDataInjector.ForCopyOnWriteMutableThreadContextMap();
+        }
+        if (threadContextMap instanceof AbstractGarbageFreeMutableThreadContext) {
+            return new ThreadContextDataInjector.ForGarbageFreeMutableThreadContextMap();
+        }
         return new ThreadContextDataInjector.ForDefaultThreadContextMap();
     }
 }

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/24cbcc6a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ThreadContextDataInjector.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ThreadContextDataInjector.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ThreadContextDataInjector.java
index 786d23f..6c56520 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ThreadContextDataInjector.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ThreadContextDataInjector.java
@@ -20,10 +20,12 @@ import java.util.List;
 import java.util.Map;
 
 import org.apache.logging.log4j.ThreadContext;
-import org.apache.logging.log4j.spi.ContextData;
+import org.apache.logging.log4j.ThreadContextAccess;
 import org.apache.logging.log4j.core.config.Property;
+import org.apache.logging.log4j.spi.AbstractCopyOnWriteMutableThreadContext;
+import org.apache.logging.log4j.spi.AbstractGarbageFreeMutableThreadContext;
+import org.apache.logging.log4j.spi.ContextData;
 import org.apache.logging.log4j.spi.MutableContextData;
-import org.apache.logging.log4j.spi.ThreadContextMap;
 
 /**
  * {@code ThreadContextDataInjector} contains a number of strategies for copying key-value pairs from the various
@@ -105,10 +107,9 @@ public class ThreadContextDataInjector  {
             // modified.
             copyProperties(props, reusable);
 
-            // TODO LOG4J2-1349
-//            final MutableContextData immutableCopy = ((AbstractGarbageFreeMutableThreadContext)
-//                    ThreadContext.getThreadContextMap()).getContextData();
-//            reusable.putAll(immutableCopy);
+            final ContextData immutableCopy = ((AbstractGarbageFreeMutableThreadContext)
+                    ThreadContextAccess.getThreadContextMap()).getContextData();
+            reusable.putAll(immutableCopy);
             return reusable;
         }
     }
@@ -133,19 +134,17 @@ public class ThreadContextDataInjector  {
          */
         @Override
         public MutableContextData injectContextData(final List<Property> props, final MutableContextData reusable) {
-            // TODO LOG4J2-1349
-
-//            // If there are no configuration properties we want to just return the ThreadContext's MutableContextData:
-//            // it is a copy-on-write data structure so we are sure ThreadContext changes will not affect our copy.
-//            final MutableContextData immutableCopy = ((AbstractCopyOnWriteMutableThreadContext)
-//                    ThreadContext.getThreadContextMap()).getContextData();
-//            if (props == null || props.isEmpty()) {
-//                return immutableCopy;
-//            }
-//            // However, if the list of Properties is non-empty we need to combine the properties and the ThreadContext
-//            // data. In that case we will copy the key-value pairs into the specified reusable MutableContextData.
-//            copyProperties(props, reusable);
-//            reusable.putAll(immutableCopy);
+            // If there are no configuration properties we want to just return the ThreadContext's MutableContextData:
+            // it is a copy-on-write data structure so we are sure ThreadContext changes will not affect our copy.
+            final MutableContextData immutableCopy = ((AbstractCopyOnWriteMutableThreadContext)
+                    ThreadContextAccess.getThreadContextMap()).getContextData();
+            if (props == null || props.isEmpty()) {
+                return immutableCopy;
+            }
+            // However, if the list of Properties is non-empty we need to combine the properties and the ThreadContext
+            // data. In that case we will copy the key-value pairs into the specified reusable MutableContextData.
+            copyProperties(props, reusable);
+            reusable.putAll(immutableCopy);
             return reusable;
         }
     }