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