Class LoggerContext

java.lang.Object
org.apache.logging.log4j.core.AbstractLifeCycle
org.apache.logging.log4j.core.LoggerContext
All Implemented Interfaces:
AutoCloseable, Consumer<Reconfigurable>, LifeCycle, org.apache.logging.log4j.spi.LoggerContext, org.apache.logging.log4j.spi.LoggerContextShutdownEnabled, org.apache.logging.log4j.spi.Terminable

public class LoggerContext extends AbstractLifeCycle implements org.apache.logging.log4j.spi.LoggerContext, AutoCloseable, org.apache.logging.log4j.spi.Terminable, Consumer<Reconfigurable>, org.apache.logging.log4j.spi.LoggerContextShutdownEnabled
The LoggerContext is the anchor for the logging system. It maintains a list of all the loggers requested by applications and a reference to the Configuration. The Configuration will contain the configured loggers, appenders, filters, etc. and will be atomically updated whenever a reconfigure occurs.
  • Field Details

  • Constructor Details

    • LoggerContext

      public LoggerContext(String name, @Nullable Object externalContext, @Nullable URI configLocation, ConfigurableInstanceFactory instanceFactory)
      Constructs a LoggerContext with a name, external context, configuration URI, and a ConfigurableInstanceFactory.
      Parameters:
      name - context name
      externalContext - external context or null
      configLocation - location of configuration as a URI
      instanceFactory - initialized ConfigurableInstanceFactory
    • LoggerContext

      public LoggerContext(String contextName, Object externalContext, String configLocation, ConfigurableInstanceFactory instanceFactory)
      Constructs a LoggerContext with a name, external context, configuration location string, and an instance factory. The location must be resolvable to a File.
      Parameters:
      contextName - context name
      externalContext - external context or null
      configLocation - configuration location
      instanceFactory - initialized ConfigurableInstanceFactory
  • Method Details

    • getEnvironment

      public PropertyEnvironment getEnvironment()
    • addShutdownListener

      public void addShutdownListener(org.apache.logging.log4j.spi.LoggerContextShutdownAware listener)
      Specified by:
      addShutdownListener in interface org.apache.logging.log4j.spi.LoggerContextShutdownEnabled
    • getListeners

      public List<org.apache.logging.log4j.spi.LoggerContextShutdownAware> getListeners()
      Specified by:
      getListeners in interface org.apache.logging.log4j.spi.LoggerContextShutdownEnabled
    • getContext

      public static LoggerContext getContext()
      Returns the current LoggerContext.

      Avoids the type cast for:

       (LoggerContext) LogManager.getContext();
       

      WARNING - The LoggerContext returned by this method may not be the LoggerContext used to create a Logger for the calling class.

      Returns:
      The current LoggerContext.
      See Also:
      • LogManager.getContext()
    • getContext

      public static LoggerContext getContext(boolean currentContext)
      Returns a LoggerContext.

      Avoids the type cast for:

       (LoggerContext) LogManager.getContext(currentContext);
       
      Parameters:
      currentContext - if false the LoggerContext appropriate for the caller of this method is returned. For example, in a web application if the caller is a class in WEB-INF/lib then one LoggerContext may be returned and if the caller is a class in the container's classpath then a different LoggerContext may be returned. If true then only a single LoggerContext will be returned.
      Returns:
      a LoggerContext.
      See Also:
      • LogManager.getContext(boolean)
    • getContext

      public static LoggerContext getContext(ClassLoader loader, boolean currentContext, URI configLocation)
      Returns a LoggerContext.

      Avoids the type cast for:

       (LoggerContext) LogManager.getContext(loader, currentContext, configLocation);
       
      Parameters:
      loader - The ClassLoader for the context. If null the context will attempt to determine the appropriate ClassLoader.
      currentContext - if false the LoggerContext appropriate for the caller of this method is returned. For example, in a web application if the caller is a class in WEB-INF/lib then one LoggerContext may be returned and if the caller is a class in the container's classpath then a different LoggerContext may be returned. If true then only a single LoggerContext will be returned.
      configLocation - The URI for the configuration to use.
      Returns:
      a LoggerContext.
      See Also:
      • LogManager.getContext(ClassLoader, boolean, URI)
    • start

      public void start()
      Specified by:
      start in interface LifeCycle
      Overrides:
      start in class AbstractLifeCycle
    • start

      public void start(Configuration config)
      Starts with a specific configuration.
      Parameters:
      config - The new Configuration.
    • close

      public void close()
      Specified by:
      close in interface AutoCloseable
    • terminate

      public void terminate()
      Specified by:
      terminate in interface org.apache.logging.log4j.spi.Terminable
    • stop

      public boolean stop(long timeout, TimeUnit timeUnit)
      Blocks until all Log4j tasks have completed execution after a shutdown request and all appenders have shut down, or the timeout occurs, or the current thread is interrupted, whichever happens first.

      Not all appenders will honor this, it is a hint and not an absolute guarantee that the this method not block longer. Setting timeout too low increase the risk of losing outstanding log events not yet written to the final destination.

      Log4j can start threads to perform certain actions like file rollovers, calling this method with a positive timeout will block until the rollover thread is done.

      Specified by:
      stop in interface LifeCycle
      Overrides:
      stop in class AbstractLifeCycle
      Parameters:
      timeout - the maximum time to wait, or 0 which mean that each apppender uses its default timeout, and don't wait for background tasks
      timeUnit - the time unit of the timeout argument
      Returns:
      true if the logger context terminated and false if the timeout elapsed before termination.
      Since:
      2.7
    • getName

      public String getName()
      Gets the name.
      Returns:
      the name.
    • getRootLogger

      public Logger getRootLogger()
      Gets the root logger.
      Returns:
      the root logger.
    • setName

      public void setName(String name)
      Sets the name.
      Parameters:
      name - the new LoggerContext name
      Throws:
      NullPointerException - if the specified name is null
    • getObject

      public Object getObject(String key)
      Specified by:
      getObject in interface org.apache.logging.log4j.spi.LoggerContext
    • putObject

      public Object putObject(String key, Object value)
      Specified by:
      putObject in interface org.apache.logging.log4j.spi.LoggerContext
    • putObjectIfAbsent

      public Object putObjectIfAbsent(String key, Object value)
      Specified by:
      putObjectIfAbsent in interface org.apache.logging.log4j.spi.LoggerContext
    • removeObject

      public Object removeObject(String key)
      Specified by:
      removeObject in interface org.apache.logging.log4j.spi.LoggerContext
    • removeObject

      public boolean removeObject(String key, Object value)
      Specified by:
      removeObject in interface org.apache.logging.log4j.spi.LoggerContext
    • setExternalContext

      public void setExternalContext(Object context)
      Sets the external context.
      Parameters:
      context - The external context.
    • getExternalContext

      public Object getExternalContext()
      Returns the external context.
      Specified by:
      getExternalContext in interface org.apache.logging.log4j.spi.LoggerContext
      Returns:
      The external context.
    • getLogger

      public Logger getLogger(String name)
      Gets a Logger from the Context.
      Specified by:
      getLogger in interface org.apache.logging.log4j.spi.LoggerContext
      Parameters:
      name - The name of the Logger to return.
      Returns:
      The Logger.
    • getLoggers

      public Collection<Logger> getLoggers()
      Gets a collection of the current loggers.

      Whether this collection is a copy of the underlying collection or not is undefined. Therefore, modify this collection at your own risk.

      Returns:
      a collection of the current loggers.
    • getLogger

      public Logger getLogger(String name, org.apache.logging.log4j.message.MessageFactory messageFactory)
      Obtains a Logger from the Context.
      Specified by:
      getLogger in interface org.apache.logging.log4j.spi.LoggerContext
      Parameters:
      name - The name of the Logger to return.
      messageFactory - The message factory is used only when creating a logger, subsequent use does not change the logger but will log a warning if mismatched.
      Returns:
      The Logger.
    • getLoggerRegistry

      public org.apache.logging.log4j.spi.LoggerRegistry<Logger> getLoggerRegistry()
      Gets the LoggerRegistry.
      Specified by:
      getLoggerRegistry in interface org.apache.logging.log4j.spi.LoggerContext
      Returns:
      the LoggerRegistry.
      Since:
      2.17.2
    • getInstanceFactory

      public InstanceFactory getInstanceFactory()
      Gets the InstanceFactory.
      Returns:
      the InstanceFactory
      Since:
      3.0.0
    • hasLogger

      public boolean hasLogger(String name)
      Determines if the specified Logger exists.
      Specified by:
      hasLogger in interface org.apache.logging.log4j.spi.LoggerContext
      Parameters:
      name - The Logger name to search for.
      Returns:
      True if the Logger exists, false otherwise.
    • hasLogger

      public boolean hasLogger(String name, org.apache.logging.log4j.message.MessageFactory messageFactory)
      Determines if the specified Logger exists.
      Specified by:
      hasLogger in interface org.apache.logging.log4j.spi.LoggerContext
      Parameters:
      name - The Logger name to search for.
      Returns:
      True if the Logger exists, false otherwise.
    • hasLogger

      public boolean hasLogger(String name, Class<? extends org.apache.logging.log4j.message.MessageFactory> messageFactoryClass)
      Determines if the specified Logger exists.
      Specified by:
      hasLogger in interface org.apache.logging.log4j.spi.LoggerContext
      Parameters:
      name - The Logger name to search for.
      Returns:
      True if the Logger exists, false otherwise.
    • getConfiguration

      public Configuration getConfiguration()
      Returns the current Configuration. The Configuration will be replaced when a reconfigure occurs.
      Returns:
      The current Configuration, never null, but may be NullConfiguration.
    • getConfiguration

      public Configuration getConfiguration(ConfigurationSource source)
    • getConfiguration

      public Configuration getConfiguration(String name, URI configLocation)
    • getConfiguration

      public Configuration getConfiguration(String name, URI configLocation, ClassLoader loader)
    • addFilter

      public void addFilter(Filter filter)
      Adds a Filter to the Configuration. Filters that are added through the API will be lost when a reconfigure occurs.
      Parameters:
      filter - The Filter to add.
    • removeFilter

      public void removeFilter(Filter filter)
      Removes a Filter from the current Configuration.
      Parameters:
      filter - The Filter to remove.
    • setConfiguration

      public Configuration setConfiguration(Configuration config)
      Sets the Configuration to be used.
      Parameters:
      config - The new Configuration.
      Returns:
      The previous Configuration.
    • addConfigurationStartedListener

      public void addConfigurationStartedListener(Consumer<Configuration> listener)
    • removeConfigurationStartedListener

      public void removeConfigurationStartedListener(Consumer<Configuration> listener)
    • addConfigurationStoppedListener

      public void addConfigurationStoppedListener(Consumer<Configuration> listener)
    • removeConfigurationStoppedListener

      public void removeConfigurationStoppedListener(Consumer<Configuration> listener)
    • getConfigLocation

      public URI getConfigLocation()
      Returns the initial configuration location or null. The returned value may not be the location of the current configuration. Use getConfiguration().getConfigurationSource().getLocation() to get the actual source of the current configuration.
      Returns:
      the initial configuration location or null
    • setConfigLocation

      public void setConfigLocation(URI configLocation)
      Sets the configLocation to the specified value and reconfigures this context.
      Parameters:
      configLocation - the location of the new configuration
    • reconfigure

      public void reconfigure()
      Reconfigures the context. Log4j does not remove Loggers during a reconfiguration. Log4j will create new LoggerConfig objects and Log4j will point the Loggers at the new LoggerConfigs. Log4j will free the old LoggerConfig, along with old Appenders and Filters.
    • reconfigure

      public void reconfigure(Configuration configuration)
    • updateLoggers

      public void updateLoggers()
      Causes all Loggers to be updated against the current Configuration.
    • updateLoggers

      public void updateLoggers(Configuration config)
      Causes all Logger to be updated against the specified Configuration.
      Parameters:
      config - The Configuration.
    • accept

      public void accept(Reconfigurable reconfigurable)
      Causes a reconfiguration to take place when the underlying configuration file changes.
      Specified by:
      accept in interface Consumer<Reconfigurable>
      Parameters:
      reconfigurable - The Configuration that can be reconfigured.
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • getLoggerBuilderClass

      protected Class<? extends Logger.Builder> getLoggerBuilderClass()
    • includeLocation

      public boolean includeLocation()
      If true loggers will include location by default.