LOG4J2-493 subclass ClassLoaderContextSelector Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/3705a75d Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/3705a75d Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/3705a75d
Branch: refs/heads/LOG4J2-1161 Commit: 3705a75d173d489b2caa7d053b9d4f27632ebef7 Parents: 7800b8f Author: rpopma <rpo...@apache.org> Authored: Fri Oct 23 02:19:42 2015 +0900 Committer: rpopma <rpo...@apache.org> Committed: Fri Oct 23 02:19:42 2015 +0900 ---------------------------------------------------------------------- .../core/async/AsyncLoggerContextSelector.java | 43 +++++--------------- 1 file changed, 10 insertions(+), 33 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/3705a75d/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLoggerContextSelector.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLoggerContextSelector.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLoggerContextSelector.java index d2ee058..4d739e3 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLoggerContextSelector.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLoggerContextSelector.java @@ -17,22 +17,16 @@ package org.apache.logging.log4j.core.async; import java.net.URI; -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ConcurrentMap; import org.apache.logging.log4j.core.LoggerContext; -import org.apache.logging.log4j.core.selector.ContextSelector; +import org.apache.logging.log4j.core.selector.ClassLoaderContextSelector; import org.apache.logging.log4j.core.util.Constants; import org.apache.logging.log4j.util.PropertiesUtil; /** - * {@code ContextSelector} that returns the singleton {@code AsyncLoggerContext}. + * {@code ContextSelector} that manages {@code AsyncLoggerContext} instances. */ -public class AsyncLoggerContextSelector implements ContextSelector { - - private ConcurrentMap<String, AsyncLoggerContext> contexts = new ConcurrentHashMap<String, AsyncLoggerContext>(); +public class AsyncLoggerContextSelector extends ClassLoaderContextSelector { /** * Returns {@code true} if the user specified this selector as the Log4jContextSelector, to make all loggers @@ -45,33 +39,16 @@ public class AsyncLoggerContextSelector implements ContextSelector { PropertiesUtil.getProperties().getStringProperty(Constants.LOG4J_CONTEXT_SELECTOR)); } - @Override - public LoggerContext getContext(final String fqcn, final ClassLoader loader, final boolean currentContext) { - // LOG4J2-666 ensure unique name across separate instances created by webapp classloaders - final int hash = loader == null ? getClass().getClassLoader().hashCode() : loader.hashCode(); - final String key = "AsyncLoggerContext@" + Integer.toHexString(hash); - AsyncLoggerContext result = contexts.get(key); - if (result == null) { - result = new AsyncLoggerContext(key); - return contexts.putIfAbsent(key, result); - } - return result; - } - - @Override - public List<LoggerContext> getLoggerContexts() { - return new ArrayList<LoggerContext>(contexts.values()); + protected LoggerContext createContext(final String name, final URI configLocation) { + return new AsyncLoggerContext(name, null, configLocation); } - @Override - public LoggerContext getContext(final String fqcn, final ClassLoader loader, final boolean currentContext, - final URI configLocation) { - return getContext(fqcn, loader, currentContext); + protected String toContextMapKey(final ClassLoader loader) { + // LOG4J2-666 ensure unique name across separate instances created by webapp classloaders + return "AsyncContext@" + Integer.toHexString(System.identityHashCode(loader)); } - @Override - public void removeContext(final LoggerContext context) { - contexts.remove(context.getName()); + protected String defaultContextName() { + return "DefaultAsyncContext@" + Thread.currentThread().getName(); } - }