Class AsyncLoggerConfig

All Implemented Interfaces:
Filterable, LocationAware, LifeCycle, LifeCycle2

@Plugin(name="AsyncLogger", category="Core", printObject=true) public class AsyncLoggerConfig extends LoggerConfig
Asynchronous Logger object that is created via configuration and can be combined with synchronous loggers.

AsyncLoggerConfig is a logger designed for high throughput and low latency logging. It does not perform any I/O in the calling (application) thread, but instead hands off the work to another thread as soon as possible. The actual logging is performed in the background thread. It uses LMAX Disruptor for inter-thread communication.

To use AsyncLoggerConfig, specify <asyncLogger> or <asyncRoot> in configuration.

Note that for performance reasons, this logger does not include source location by default. You need to specify includeLocation="true" in the configuration or any %class, %location or %line conversion patterns in your log4j.xml configuration will produce either a "?" character or no output at all.

For best performance, use AsyncLoggerConfig with the RandomAccessFileAppender or RollingRandomAccessFileAppender, with immediateFlush=false. These appenders have built-in support for the batching mechanism used by the Disruptor library, and they will flush to disk at the end of each batch. This means that even with immediateFlush=false, there will never be any items left in the buffer; all log events will all be written to disk in a very efficient manner.

  • Field Details

  • Constructor Details

  • Method Details

    • newAsyncBuilder

      @PluginBuilderFactory public static <B extends AsyncLoggerConfig.Builder<B>> B newAsyncBuilder()
    • getAsyncLoggerConfigDelegate

      AsyncLoggerConfigDelegate getAsyncLoggerConfigDelegate()
    • log

      protected void log(LogEvent event, LoggerConfig.LoggerConfigPredicate predicate)
      Description copied from class: LoggerConfig
      Logs an event.
      Overrides:
      log in class LoggerConfig
      Parameters:
      event - The log event.
      predicate - predicate for which LoggerConfig instances to append to. A null value is equivalent to a true predicate.
    • callAppenders

      protected void callAppenders(LogEvent event)
      Overrides:
      callAppenders in class LoggerConfig
    • logToAsyncDelegate

      private void logToAsyncDelegate(LogEvent event)
    • handleQueueFull

      private void handleQueueFull(LogEvent event)
    • populateLazilyInitializedFields

      private void populateLazilyInitializedFields(LogEvent event)
    • logInBackgroundThread

      void logInBackgroundThread(LogEvent event)
    • logToAsyncLoggerConfigsOnCurrentThread

      void logToAsyncLoggerConfigsOnCurrentThread(LogEvent event)
      Called by AsyncLoggerConfigHelper.RingBufferLog4jEventHandler. This method will log the provided event to only configs of type AsyncLoggerConfig (not default LoggerConfig definitions), which will be invoked on the calling thread.
    • displayName

      private String displayName()
    • start

      public void start()
      Description copied from class: AbstractFilterable
      Make the Filter available for use.
      Specified by:
      start in interface LifeCycle
      Overrides:
      start in class AbstractFilterable
    • stop

      public boolean stop(long timeout, TimeUnit timeUnit)
      Description copied from class: AbstractFilterable
      Cleanup the Filter.
      Specified by:
      stop in interface LifeCycle2
      Overrides:
      stop in class AbstractFilterable
      Parameters:
      timeout - the maximum time to wait
      timeUnit - the time unit of the timeout argument
      Returns:
      true if the receiver was stopped cleanly and normally, false otherwise.
    • createRingBufferAdmin

      public RingBufferAdmin createRingBufferAdmin(String contextName)
      Creates and returns a new RingBufferAdmin that instruments the ringbuffer of this AsyncLoggerConfig.
      Parameters:
      contextName - name of the LoggerContext
      Returns:
      a new RingBufferAdmin that instruments the ringbuffer
    • createLogger

      @Deprecated public static LoggerConfig createLogger(String additivity, String levelName, String loggerName, String includeLocation, AppenderRef[] refs, Property[] properties, Configuration config, Filter filter)
      Factory method to create a LoggerConfig.
      Parameters:
      additivity - True if additive, false otherwise.
      levelName - The Level to be associated with the Logger.
      loggerName - The name of the Logger.
      includeLocation - "true" if location should be passed downstream
      refs - An array of Appender names.
      properties - Properties to pass to the Logger.
      config - The Configuration.
      filter - A Filter.
      Returns:
      A new LoggerConfig.
    • createLogger

      @Deprecated public static LoggerConfig createLogger(@PluginAttribute(value="additivity",defaultBoolean=true) boolean additivity, @PluginAttribute("level") Level level, @Required(message="Loggers cannot be configured without a name") @PluginAttribute("name") String loggerName, @PluginAttribute("includeLocation") String includeLocation, @PluginElement("AppenderRef") AppenderRef[] refs, @PluginElement("Properties") Property[] properties, @PluginConfiguration Configuration config, @PluginElement("Filter") Filter filter)
      Deprecated.
      Factory method to create a LoggerConfig.
      Parameters:
      additivity - True if additive, false otherwise.
      level - The Level to be associated with the Logger.
      loggerName - The name of the Logger.
      includeLocation - "true" if location should be passed downstream
      refs - An array of Appender names.
      properties - Properties to pass to the Logger.
      config - The Configuration.
      filter - A Filter.
      Returns:
      A new LoggerConfig.
      Since:
      3.0
    • includeLocation

      @Deprecated protected static boolean includeLocation(String includeLocationConfigValue)
      Deprecated.
      since 2.25.0. The method will become private in version 3.0.
    • shouldIncludeLocation

      private static boolean shouldIncludeLocation(String includeLocationConfigValue)