LOG4J2-1010 LOG4J2-1447 cleaner context injection code now that ThreadContextMap2 is a MutableContextDataSupplier
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/04619890 Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/04619890 Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/04619890 Branch: refs/heads/master Commit: 046198901839a31b77436759ec354c183e54a25a Parents: 09eb4f4 Author: rpopma <rpo...@apache.org> Authored: Thu Sep 22 11:02:54 2016 +0900 Committer: rpopma <rpo...@apache.org> Committed: Thu Sep 22 11:02:54 2016 +0900 ---------------------------------------------------------------------- .../org/apache/logging/log4j/ThreadContextAccess.java | 13 +++++++++++++ .../log4j/core/impl/ContextDataInjectorFactory.java | 6 +++--- .../log4j/core/impl/ThreadContextDataInjector.java | 11 ++++------- 3 files changed, 20 insertions(+), 10 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/04619890/log4j-core/src/main/java/org/apache/logging/log4j/ThreadContextAccess.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/ThreadContextAccess.java b/log4j-core/src/main/java/org/apache/logging/log4j/ThreadContextAccess.java index 2e2a992..c5c33de 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/ThreadContextAccess.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/ThreadContextAccess.java @@ -18,6 +18,7 @@ package org.apache.logging.log4j; import org.apache.logging.log4j.spi.ThreadContextMap; +import org.apache.logging.log4j.spi.ThreadContextMap2; /** * <em>This class is intended for internal log4j2 usage and should not be used directly by applications.</em> @@ -43,4 +44,16 @@ public final class ThreadContextAccess { public static ThreadContextMap getThreadContextMap() { return ThreadContext.getThreadContextMap(); } + + /** + * Returns the internal data structure used to store thread context key-value pairs. + * <p><em> + * This method is intended for internal log4j2 usage. + * The returned data structure is not intended to be used directly by applications. + * </em></p> + * @return the internal data structure used to store thread context key-value pairs + */ + public static ThreadContextMap2 getThreadContextMap2() { + return (ThreadContextMap2) ThreadContext.getThreadContextMap(); + } } http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/04619890/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 31e1013..eb1e0ce 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 @@ -21,8 +21,8 @@ import org.apache.logging.log4j.core.ContextDataInjector; import org.apache.logging.log4j.core.LogEvent; import org.apache.logging.log4j.spi.ContextData; import org.apache.logging.log4j.spi.CopyOnWrite; -import org.apache.logging.log4j.spi.MutableContextDataSupplier; import org.apache.logging.log4j.spi.ThreadContextMap; +import org.apache.logging.log4j.spi.ThreadContextMap2; import org.apache.logging.log4j.status.StatusLogger; import org.apache.logging.log4j.util.LoaderUtil; import org.apache.logging.log4j.util.PropertiesUtil; @@ -79,10 +79,10 @@ public class ContextDataInjectorFactory { private static ContextDataInjector createDefaultInjector() { final ThreadContextMap threadContextMap = ThreadContextAccess.getThreadContextMap(); - if (threadContextMap instanceof CopyOnWrite && threadContextMap instanceof MutableContextDataSupplier) { + if (threadContextMap instanceof CopyOnWrite && threadContextMap instanceof ThreadContextMap2) { return new ThreadContextDataInjector.ForCopyOnWriteMutableThreadContextMap(); } - if (threadContextMap instanceof MutableContextDataSupplier) { + if (threadContextMap instanceof ThreadContextMap2) { return new ThreadContextDataInjector.ForGarbageFreeMutableThreadContextMap(); } return new ThreadContextDataInjector.ForDefaultThreadContextMap(); http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/04619890/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 e57a807..8c72f70 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 @@ -25,7 +25,6 @@ import org.apache.logging.log4j.core.ContextDataInjector; import org.apache.logging.log4j.core.config.Property; import org.apache.logging.log4j.spi.ContextData; import org.apache.logging.log4j.spi.MutableContextData; -import org.apache.logging.log4j.spi.MutableContextDataSupplier; import org.apache.logging.log4j.spi.ThreadContextMap; /** @@ -119,15 +118,14 @@ public class ThreadContextDataInjector { // modified. copyProperties(props, reusable); - final ContextData immutableCopy = ((MutableContextDataSupplier) ThreadContextAccess.getThreadContextMap()) - .getMutableContextData(); + final ContextData immutableCopy = ThreadContextAccess.getThreadContextMap2().getMutableContextData(); reusable.putAll(immutableCopy); return reusable; } @Override public ContextData rawContextData() { - return ((MutableContextDataSupplier) ThreadContextAccess.getThreadContextMap()).getMutableContextData(); + return ThreadContextAccess.getThreadContextMap2().getMutableContextData(); } } @@ -153,8 +151,7 @@ public class ThreadContextDataInjector { public MutableContextData injectContextData(final List<Property> props, final MutableContextData reusable) { // 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 = - ((MutableContextDataSupplier) ThreadContextAccess.getThreadContextMap()).getMutableContextData(); + final MutableContextData immutableCopy = ThreadContextAccess.getThreadContextMap2().getMutableContextData(); if (props == null || props.isEmpty()) { return immutableCopy; } @@ -167,7 +164,7 @@ public class ThreadContextDataInjector { @Override public ContextData rawContextData() { - return ((MutableContextDataSupplier) ThreadContextAccess.getThreadContextMap()).getMutableContextData(); + return ThreadContextAccess.getThreadContextMap2().getMutableContextData(); } }