org.apache.logging.log4j.core.async
Class AsyncLoggerConfig

java.lang.Object
  extended by org.apache.logging.log4j.core.AbstractLifeCycle
      extended by org.apache.logging.log4j.core.filter.AbstractFilterable
          extended by org.apache.logging.log4j.core.config.LoggerConfig
              extended by org.apache.logging.log4j.core.async.AsyncLoggerConfig
All Implemented Interfaces:
Filterable, LifeCycle

@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 the LMAX Disruptor library for inter-thread communication. (http://lmax-exchange.github.com/disruptor/)

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.


Nested Class Summary
static class AsyncLoggerConfig.RootLogger
          An asynchronous root Logger.
 
Nested classes/interfaces inherited from interface org.apache.logging.log4j.core.LifeCycle
LifeCycle.State
 
Field Summary
 
Fields inherited from class org.apache.logging.log4j.core.AbstractLifeCycle
LOGGER
 
Constructor Summary
  AsyncLoggerConfig()
          Default constructor.
  AsyncLoggerConfig(String name, org.apache.logging.log4j.Level level, boolean additive)
          Constructor that sets the name, level and additive values.
protected AsyncLoggerConfig(String name, List<AppenderRef> appenders, Filter filter, org.apache.logging.log4j.Level level, boolean additive, Property[] properties, Configuration config, boolean includeLocation)
           
 
Method Summary
protected  void callAppenders(LogEvent event)
          Passes on the event to a separate thread that will call asyncCallAppenders(LogEvent).
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.
 RingBufferAdmin createRingBufferAdmin(String contextName)
          Creates and returns a new RingBufferAdmin that instruments the ringbuffer of this AsyncLoggerConfig.
protected static boolean includeLocation(String includeLocationConfigValue)
           
 void start()
          Make the Filter available for use.
 void stop()
          Cleanup the Filter.
 
Methods inherited from class org.apache.logging.log4j.core.config.LoggerConfig
addAppender, clearAppenders, createLogger, getAppenderRefs, getAppenders, getFilter, getLevel, getLogEventFactory, getName, getParent, getProperties, isAdditive, isIncludeLocation, log, log, removeAppender, setAdditive, setLevel, setLogEventFactory, setParent, toString
 
Methods inherited from class org.apache.logging.log4j.core.filter.AbstractFilterable
addFilter, hasFilter, isFiltered, removeFilter
 
Methods inherited from class org.apache.logging.log4j.core.AbstractLifeCycle
getState, isInitialized, isStarted, isStarting, isStopped, isStopping, setStarted, setStarting, setState, setStopped, setStopping
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface org.apache.logging.log4j.core.LifeCycle
isStarted, isStopped
 

Constructor Detail

AsyncLoggerConfig

public AsyncLoggerConfig()
Default constructor.


AsyncLoggerConfig

public AsyncLoggerConfig(String name,
                         org.apache.logging.log4j.Level level,
                         boolean additive)
Constructor that sets the name, level and additive values.

Parameters:
name - The Logger name.
level - The Level.
additive - true if the Logger is additive, false otherwise.

AsyncLoggerConfig

protected AsyncLoggerConfig(String name,
                            List<AppenderRef> appenders,
                            Filter filter,
                            org.apache.logging.log4j.Level level,
                            boolean additive,
                            Property[] properties,
                            Configuration config,
                            boolean includeLocation)
Method Detail

callAppenders

protected void callAppenders(LogEvent event)
Passes on the event to a separate thread that will call asyncCallAppenders(LogEvent).

Overrides:
callAppenders in class LoggerConfig

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 void stop()
Description copied from class: AbstractFilterable
Cleanup the Filter.

Specified by:
stop in interface LifeCycle
Overrides:
stop in class AbstractFilterable

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

createLogger

@PluginFactory
public static LoggerConfig createLogger(@PluginAttribute(value="additivity")
                                                      String additivity,
                                                      @PluginAttribute(value="level")
                                                      String levelName,
                                                      @PluginAttribute(value="name")
                                                      String loggerName,
                                                      @PluginAttribute(value="includeLocation")
                                                      String includeLocation,
                                                      @PluginElement(value="AppenderRef")
                                                      AppenderRef[] refs,
                                                      @PluginElement(value="Properties")
                                                      Property[] properties,
                                                      @PluginConfiguration
                                                      Configuration config,
                                                      @PluginElement(value="Filter")
                                                      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.

includeLocation

protected static boolean includeLocation(String includeLocationConfigValue)


Copyright © 1999-2014 Apache Software Foundation. All Rights Reserved.
Apache Logging, Apache Log4j, Log4j, Apache, the Apache feather logo, the Apache Logging project logo, and the Apache Log4j logo are trademarks of The Apache Software Foundation.