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 Details

  • Constructor Details

    • ClassLoaderContextSelector

      public ClassLoaderContextSelector()
  • Method Details

    • shutdown

      public void shutdown(String fqcn, ClassLoader loader, boolean currentContext, boolean allContexts)
      Description copied from interface: ContextSelector
      Shuts down the LoggerContext.
      Specified by:
      shutdown in interface ContextSelector
      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
      allContexts - if true all LoggerContexts that can be located will be shutdown.
    • contextShutdown

      public void contextShutdown(LoggerContext loggerContext)
      Specified by:
      contextShutdown in interface LoggerContextShutdownAware
    • hasContext

      public boolean hasContext(String fqcn, ClassLoader loader, boolean currentContext)
      Description copied from interface: ContextSelector
      Checks to see if a LoggerContext is installed. The default implementation returns false.
      Specified by:
      hasContext in interface ContextSelector
      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.
    • getContext

      public LoggerContext getContext(String fqcn, ClassLoader loader, boolean currentContext)
      Description copied from interface: ContextSelector
      Returns the LoggerContext.
      Specified by:
      getContext in interface ContextSelector
      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: ContextSelector
      Returns the LoggerContext.
      Specified by:
      getContext in interface ContextSelector
      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: ContextSelector
      Returns the LoggerContext.
      Specified by:
      getContext in interface ContextSelector
      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 interface ContextSelector
      Parameters:
      context - The context to remove.
    • isClassLoaderDependent

      public boolean isClassLoaderDependent()
      Description copied from interface: ContextSelector
      Determines 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 returns true to preserve the old behavior.
      Specified by:
      isClassLoaderDependent in interface ContextSelector
      Returns:
      true if the class loader is required.
    • getLoggerContexts

      public List<LoggerContext> getLoggerContexts()
      Description copied from interface: ContextSelector
      Returns a List of all the available LoggerContexts.
      Specified by:
      getLoggerContexts in interface ContextSelector
      Returns:
      The List of LoggerContexts.
    • createContext

      protected LoggerContext createContext(String name, URI configLocation)
    • toContextMapKey

      protected String toContextMapKey(ClassLoader loader)
    • getDefault

      protected LoggerContext getDefault()
    • defaultContextName

      protected String defaultContextName()