Class ClassLoaderContextSelector
java.lang.Object
org.apache.logging.log4j.core.selector.ClassLoaderContextSelector
- All Implemented Interfaces:
ContextSelector,LoggerContextShutdownAware
- Direct Known Subclasses:
AsyncLoggerContextSelector,BundleContextSelector
public class ClassLoaderContextSelector
extends Object
implements ContextSelector, LoggerContextShutdownAware
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
FieldsModifier and TypeFieldDescriptionprotected static final ConcurrentMap<String, AtomicReference<WeakReference<LoggerContext>>> private static final AtomicReference<LoggerContext> protected static final StatusLoggerFields inherited from interface org.apache.logging.log4j.core.selector.ContextSelector
DEFAULT_STOP_TIMEOUT -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidcontextShutdown(LoggerContext loggerContext) protected LoggerContextcreateContext(String name, URI configLocation) protected Stringprivate LoggerContextfindContext(ClassLoader loaderOrNull) getContext(String fqcn, ClassLoader loader, boolean currentContext) Returns the LoggerContext.getContext(String fqcn, ClassLoader loader, boolean currentContext, URI configLocation) Returns the LoggerContext.getContext(String fqcn, ClassLoader loader, Map.Entry<String, Object> entry, boolean currentContext, URI configLocation) Returns the LoggerContext.protected LoggerContextReturns a List of all the available LoggerContexts.booleanhasContext(String fqcn, ClassLoader loader, boolean currentContext) Checks to see if a LoggerContext is installed.booleanDetermines whether or not this ContextSelector depends on the callers classloader.private LoggerContextlocateContext(ClassLoader loaderOrNull, Map.Entry<String, Object> entry, URI configLocation) voidremoveContext(LoggerContext context) Remove any references to the LoggerContext.voidshutdown(String fqcn, ClassLoader loader, boolean currentContext, boolean allContexts) Shuts down the LoggerContext.protected StringtoContextMapKey(ClassLoader loader) Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface org.apache.logging.log4j.core.selector.ContextSelector
getContext
-
Field Details
-
DEFAULT_CONTEXT
-
LOGGER
-
CONTEXT_MAP
protected static final ConcurrentMap<String,AtomicReference<WeakReference<LoggerContext>>> CONTEXT_MAP
-
-
Constructor Details
-
ClassLoaderContextSelector
public ClassLoaderContextSelector()
-
-
Method Details
-
shutdown
Description copied from interface:ContextSelectorShuts down the LoggerContext.- Specified by:
shutdownin interfaceContextSelector- Parameters:
fqcn- The fully qualified class name of the caller.loader- The ClassLoader to use or null.currentContext- If true returns the current Context, if false returns the Context appropriateallContexts- if true all LoggerContexts that can be located will be shutdown.
-
contextShutdown
- Specified by:
contextShutdownin interfaceLoggerContextShutdownAware
-
hasContext
Description copied from interface:ContextSelectorChecks to see if a LoggerContext is installed. The default implementation returns false.- Specified by:
hasContextin interfaceContextSelector- Parameters:
fqcn- The fully qualified class name of the caller.loader- The 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:
- true if a LoggerContext has been installed, false otherwise.
-
findContext
-
getContext
Description copied from interface:ContextSelectorReturns the LoggerContext.- Specified by:
getContextin 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(String fqcn, ClassLoader loader, boolean currentContext, URI configLocation) Description copied from interface:ContextSelectorReturns the LoggerContext.- Specified by:
getContextin 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.
-
getContext
public LoggerContext getContext(String fqcn, ClassLoader loader, Map.Entry<String, Object> entry, boolean currentContext, URI configLocation) Description copied from interface:ContextSelectorReturns the LoggerContext.- Specified by:
getContextin 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
Description copied from interface:ContextSelectorRemove any references to the LoggerContext.- Specified by:
removeContextin interfaceContextSelector- Parameters:
context- The context to remove.
-
isClassLoaderDependent
public boolean isClassLoaderDependent()Description copied from interface:ContextSelectorDetermines whether or not this ContextSelector depends on the callers classloader. This method should be overridden by implementations, however a default method is provided which always returnstrueto preserve the old behavior.- Specified by:
isClassLoaderDependentin interfaceContextSelector- Returns:
- true if the class loader is required.
-
getLoggerContexts
Description copied from interface:ContextSelectorReturns a List of all the available LoggerContexts.- Specified by:
getLoggerContextsin interfaceContextSelector- Returns:
- The List of LoggerContexts.
-
locateContext
private LoggerContext locateContext(ClassLoader loaderOrNull, Map.Entry<String, Object> entry, URI configLocation) -
createContext
-
toContextMapKey
-
getDefault
-
defaultContextName
-