Class ClassLoaderContextSelector
- java.lang.Object
-
- org.apache.logging.log4j.core.selector.ClassLoaderContextSelector
-
- All Implemented Interfaces:
ContextSelector
- Direct Known Subclasses:
AsyncLoggerContextSelector
,BundleContextSelector
public class ClassLoaderContextSelector extends java.lang.Object implements ContextSelector
This ContextSelector chooses a LoggerContext based upon the ClassLoader of the caller. This allows Loggers assigned to static variables to be released along with the classes that own then. Other ContextSelectors will generally cause Loggers associated with classes loaded from different ClassLoaders to be co-mingled. This is a problem if, for example, a web application is undeployed as some of the Loggers being released may be associated with a Class in a parent ClassLoader, which will generally have negative consequences. The main downside to this ContextSelector is that Configuration is more challenging. This ContextSelector should not be used with a Servlet Filter such as the Log4jServletFilter.
-
-
Field Summary
Fields Modifier and Type Field Description protected static java.util.concurrent.ConcurrentMap<java.lang.String,java.util.concurrent.atomic.AtomicReference<java.lang.ref.WeakReference<LoggerContext>>>
CONTEXT_MAP
protected static StatusLogger
LOGGER
-
Constructor Summary
Constructors Constructor Description ClassLoaderContextSelector()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected LoggerContext
createContext(java.lang.String name, java.net.URI configLocation)
protected java.lang.String
defaultContextName()
LoggerContext
getContext(java.lang.String fqcn, java.lang.ClassLoader loader, boolean currentContext)
Returns the LoggerContext.LoggerContext
getContext(java.lang.String fqcn, java.lang.ClassLoader loader, boolean currentContext, java.net.URI configLocation)
Returns the LoggerContext.protected LoggerContext
getDefault()
java.util.List<LoggerContext>
getLoggerContexts()
Returns a List of all the available LoggerContexts.void
removeContext(LoggerContext context)
Remove any references to the LoggerContext.protected java.lang.String
toContextMapKey(java.lang.ClassLoader loader)
-
-
-
Field Detail
-
LOGGER
protected static final StatusLogger LOGGER
-
CONTEXT_MAP
protected static final java.util.concurrent.ConcurrentMap<java.lang.String,java.util.concurrent.atomic.AtomicReference<java.lang.ref.WeakReference<LoggerContext>>> CONTEXT_MAP
-
-
Method Detail
-
getContext
public LoggerContext getContext(java.lang.String fqcn, java.lang.ClassLoader loader, boolean currentContext)
Description copied from interface:ContextSelector
Returns the LoggerContext.- Specified by:
getContext
in interfaceContextSelector
- Parameters:
fqcn
- The fully qualified class name of the caller.loader
- ClassLoader to use or null.currentContext
- If true returns the current Context, if false returns the Context appropriate for the caller if a more appropriate Context can be determined.- Returns:
- The LoggerContext.
-
getContext
public LoggerContext getContext(java.lang.String fqcn, java.lang.ClassLoader loader, boolean currentContext, java.net.URI configLocation)
Description copied from interface:ContextSelector
Returns the LoggerContext.- Specified by:
getContext
in interfaceContextSelector
- Parameters:
fqcn
- The fully qualified class name of the caller.loader
- ClassLoader to use or null.currentContext
- If true returns the current Context, if false returns the Context appropriate for the caller if a more appropriate Context can be determined.configLocation
- The location of the configuration for the LoggerContext.- Returns:
- The LoggerContext.
-
removeContext
public void removeContext(LoggerContext context)
Description copied from interface:ContextSelector
Remove any references to the LoggerContext.- Specified by:
removeContext
in interfaceContextSelector
- Parameters:
context
- The context to remove.
-
getLoggerContexts
public java.util.List<LoggerContext> getLoggerContexts()
Description copied from interface:ContextSelector
Returns a List of all the available LoggerContexts.- Specified by:
getLoggerContexts
in interfaceContextSelector
- Returns:
- The List of LoggerContexts.
-
createContext
protected LoggerContext createContext(java.lang.String name, java.net.URI configLocation)
-
toContextMapKey
protected java.lang.String toContextMapKey(java.lang.ClassLoader loader)
-
getDefault
protected LoggerContext getDefault()
-
defaultContextName
protected java.lang.String defaultContextName()
-
-