@Plugin(name="asyncLogger", category="Core", printObject=true) public class AsyncLoggerConfig extends LoggerConfig
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.
Modifier and Type | Class and Description |
---|---|
static class |
AsyncLoggerConfig.Builder<B extends AsyncLoggerConfig.Builder<B>> |
static class |
AsyncLoggerConfig.RootLogger
An asynchronous root Logger.
|
LoggerConfig.LevelAndRefs, LoggerConfig.LoggerConfigPredicate
LifeCycle.State
ROOT
DEFAULT_STOP_TIMEOUT, DEFAULT_STOP_TIMEUNIT, LOGGER
Modifier | Constructor and Description |
---|---|
protected |
AsyncLoggerConfig(String name,
List<AppenderRef> appenders,
Filter filter,
Level level,
boolean additive,
Property[] properties,
Configuration config,
boolean includeLocation) |
Modifier and Type | Method and Description |
---|---|
protected void |
callAppenders(LogEvent event) |
static LoggerConfig |
createLogger(boolean additivity,
Level level,
String loggerName,
String includeLocation,
AppenderRef[] refs,
Property[] properties,
Configuration config,
Filter filter)
Deprecated.
|
static LoggerConfig |
createLogger(String additivity,
String levelName,
String loggerName,
String includeLocation,
AppenderRef[] refs,
Property[] properties,
Configuration config,
Filter filter)
|
RingBufferAdmin |
createRingBufferAdmin(String contextName)
Creates and returns a new
RingBufferAdmin that instruments the
ringbuffer of this AsyncLoggerConfig . |
protected static boolean |
includeLocation(String includeLocationConfigValue) |
protected void |
log(LogEvent event,
LoggerConfig.LoggerConfigPredicate predicate)
Logs an event.
|
static <B extends AsyncLoggerConfig.Builder<B>> |
newAsyncBuilder() |
void |
start()
Make the Filter available for use.
|
boolean |
stop(long timeout,
TimeUnit timeUnit)
Cleanup the Filter.
|
addAppender, clearAppenders, createLogger, getAppenderRefs, getAppenders, getExplicitLevel, getFilter, getLevel, getLevelAndRefs, getLogEventFactory, getName, getParent, getProperties, getPropertyList, getReliabilityStrategy, hasAppenders, includeLocation, isAdditive, isIncludeLocation, isPropertiesRequireLookup, log, log, log, newBuilder, removeAppender, requiresLocation, setAdditive, setLevel, setLogEventFactory, setParent, toString
addFilter, getPropertyArray, hasFilter, isFiltered, removeFilter, stop
equalsImpl, getState, getStatusLogger, hashCodeImpl, initialize, isInitialized, isStarted, isStarting, isStopped, isStopping, setStarted, setStarting, setState, setStopped, setStopping, stop, stop
protected AsyncLoggerConfig(String name, List<AppenderRef> appenders, Filter filter, Level level, boolean additive, Property[] properties, Configuration config, boolean includeLocation)
@PluginBuilderFactory public static <B extends AsyncLoggerConfig.Builder<B>> B newAsyncBuilder()
protected void log(LogEvent event, LoggerConfig.LoggerConfigPredicate predicate)
LoggerConfig
log
in class LoggerConfig
event
- The log event.predicate
- predicate for which LoggerConfig instances to append to.
A null value is equivalent to a true predicate.protected void callAppenders(LogEvent event)
callAppenders
in class LoggerConfig
public void start()
AbstractFilterable
start
in interface LifeCycle
start
in class AbstractFilterable
public boolean stop(long timeout, TimeUnit timeUnit)
AbstractFilterable
stop
in interface LifeCycle2
stop
in class AbstractFilterable
timeout
- the maximum time to waittimeUnit
- the time unit of the timeout argumentpublic RingBufferAdmin createRingBufferAdmin(String contextName)
RingBufferAdmin
that instruments the
ringbuffer of this AsyncLoggerConfig
.contextName
- name of the LoggerContext
RingBufferAdmin
that instruments the ringbuffer@Deprecated public static LoggerConfig createLogger(String additivity, String levelName, String loggerName, String includeLocation, AppenderRef[] refs, Property[] properties, Configuration config, Filter filter)
createLogger(boolean, Level, String, String, AppenderRef[], Property[], Configuration, Filter)
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 downstreamrefs
- An array of Appender names.properties
- Properties to pass to the Logger.config
- The Configuration.filter
- A Filter.@Deprecated public static LoggerConfig createLogger(@PluginAttribute(value="additivity",defaultBoolean=true) boolean additivity, @PluginAttribute(value="level") Level level, @Required(message="Loggers cannot be configured without a name") @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)
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 downstreamrefs
- An array of Appender names.properties
- Properties to pass to the Logger.config
- The Configuration.filter
- A Filter.protected static boolean includeLocation(String includeLocationConfigValue)
Copyright © 1999-2023 The 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.