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 2015/10/22 19:50:28 UTC
[5/9] logging-log4j2 git commit: LOG4J2-493 subclass
ClassLoaderContextSelector
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-493-AsyncLogger-webapps
Commit: 3705a75d173d489b2caa7d053b9d4f27632ebef7
Parents: 7800b8f
Author: rpopma <rp...@apache.org>
Authored: Fri Oct 23 02:19:42 2015 +0900
Committer: rpopma <rp...@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();
}
-
}