Class RoutingAppender
- java.lang.Object
-
- org.apache.logging.log4j.core.AbstractLifeCycle
-
- org.apache.logging.log4j.core.filter.AbstractFilterable
-
- org.apache.logging.log4j.core.appender.AbstractAppender
-
- org.apache.logging.log4j.core.appender.routing.RoutingAppender
-
- All Implemented Interfaces:
Appender,Filterable,LocationAware,LifeCycle,LifeCycle2
@Plugin(name="Routing", category="Core", elementType="appender", printObject=true) public final class RoutingAppender extends AbstractAppender
This Appender "routes" between various Appenders, some of which can be references to Appenders defined earlier in the configuration while others can be dynamically created within this Appender as required. Routing is achieved by specifying a pattern on the Routing appender declaration. The pattern should contain one or more substitution patterns of the form "$${[key:]token}". The pattern will be resolved each time the Appender is called using the built in StrSubstitutor and the StrLookup plugin that matches the specified key.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static classRoutingAppender.Builder<B extends RoutingAppender.Builder<B>>private static classRoutingAppender.CreatedRouteAppenderControlprivate static classRoutingAppender.ReferencedRouteAppenderControlprivate static classRoutingAppender.RouteAppenderControlLOG4J2-2629: PurgePolicy implementations can invokedeleteAppender(String)after we have looked up an instance of a target appender but before events are appended, which could result in events not being recorded to any appender.-
Nested classes/interfaces inherited from interface org.apache.logging.log4j.core.LifeCycle
LifeCycle.State
-
-
Field Summary
Fields Modifier and Type Field Description private Configurationconfigurationprivate java.util.concurrent.ConcurrentMap<java.lang.String,RoutingAppender.CreatedRouteAppenderControl>createdAppendersprivate java.util.Map<java.lang.String,AppenderControl>createdAppendersUnmodifiableViewprivate static java.lang.StringDEFAULT_KEYprivate RoutedefaultRouteprivate AbstractScriptdefaultRouteScriptprivate PurgePolicypurgePolicyprivate java.util.concurrent.ConcurrentMap<java.lang.String,RoutingAppender.RouteAppenderControl>referencedAppendersprivate RewritePolicyrewritePolicyprivate Routesroutesprivate java.util.concurrent.ConcurrentMap<java.lang.Object,java.lang.Object>scriptStaticVariablesstatic java.lang.StringSTATIC_VARIABLES_KEY-
Fields inherited from class org.apache.logging.log4j.core.AbstractLifeCycle
DEFAULT_STOP_TIMEOUT, DEFAULT_STOP_TIMEUNIT, LOGGER
-
Fields inherited from interface org.apache.logging.log4j.core.Appender
ELEMENT_TYPE, EMPTY_ARRAY
-
-
Constructor Summary
Constructors Modifier Constructor Description privateRoutingAppender(java.lang.String name, Filter filter, boolean ignoreExceptions, Routes routes, RewritePolicy rewritePolicy, Configuration configuration, PurgePolicy purgePolicy, AbstractScript defaultRouteScript, Property[] properties)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Deprecated Methods Modifier and Type Method Description voidappend(LogEvent event)Logs a LogEvent using whatever logic this Appender wishes to use.static RoutingAppendercreateAppender(java.lang.String name, java.lang.String ignore, Routes routes, Configuration config, RewritePolicy rewritePolicy, PurgePolicy purgePolicy, Filter filter)Deprecated.Since 2.7; usenewBuilder()private AppendercreateAppender(Route route, LogEvent event)voiddeleteAppender(java.lang.String key)Deletes the specified appender.private RoutingAppender.RouteAppenderControlgetAppender(java.lang.String key)java.util.Map<java.lang.String,AppenderControl>getAppenders()Returns an unmodifiable view of the appenders created by thisRoutingAppender.ConfigurationgetConfiguration()private RoutingAppender.RouteAppenderControlgetControl(java.lang.String key, LogEvent event)RoutegetDefaultRoute()AbstractScriptgetDefaultRouteScript()PurgePolicygetPurgePolicy()RewritePolicygetRewritePolicy()RoutesgetRoutes()java.util.concurrent.ConcurrentMap<java.lang.Object,java.lang.Object>getScriptStaticVariables()static <B extends RoutingAppender.Builder<B>>
BnewBuilder()voidstart()Make the Filter available for use.booleanstop(long timeout, java.util.concurrent.TimeUnit timeUnit)Cleanup the Filter.private voidupdatePurgePolicy(java.lang.String key, LogEvent event)-
Methods inherited from class org.apache.logging.log4j.core.appender.AbstractAppender
error, error, error, getHandler, getLayout, getName, ignoreExceptions, parseInt, requiresLocation, setHandler, toSerializable, toString
-
Methods inherited from class org.apache.logging.log4j.core.filter.AbstractFilterable
addFilter, getFilter, getPropertyArray, hasFilter, isFiltered, removeFilter, stop
-
Methods inherited from class org.apache.logging.log4j.core.AbstractLifeCycle
equalsImpl, getState, getStatusLogger, hashCodeImpl, initialize, isInitialized, isStarted, isStarting, isStopped, isStopping, setStarted, setStarting, setState, setStopped, setStopping, stop, stop
-
-
-
-
Field Detail
-
STATIC_VARIABLES_KEY
public static final java.lang.String STATIC_VARIABLES_KEY
- See Also:
- Constant Field Values
-
DEFAULT_KEY
private static final java.lang.String DEFAULT_KEY
- See Also:
- Constant Field Values
-
routes
private final Routes routes
-
defaultRoute
private Route defaultRoute
-
configuration
private final Configuration configuration
-
createdAppenders
private final java.util.concurrent.ConcurrentMap<java.lang.String,RoutingAppender.CreatedRouteAppenderControl> createdAppenders
-
createdAppendersUnmodifiableView
private final java.util.Map<java.lang.String,AppenderControl> createdAppendersUnmodifiableView
-
referencedAppenders
private final java.util.concurrent.ConcurrentMap<java.lang.String,RoutingAppender.RouteAppenderControl> referencedAppenders
-
rewritePolicy
private final RewritePolicy rewritePolicy
-
purgePolicy
private final PurgePolicy purgePolicy
-
defaultRouteScript
private final AbstractScript defaultRouteScript
-
scriptStaticVariables
private final java.util.concurrent.ConcurrentMap<java.lang.Object,java.lang.Object> scriptStaticVariables
-
-
Constructor Detail
-
RoutingAppender
private RoutingAppender(java.lang.String name, Filter filter, boolean ignoreExceptions, Routes routes, RewritePolicy rewritePolicy, Configuration configuration, PurgePolicy purgePolicy, AbstractScript defaultRouteScript, Property[] properties)
-
-
Method Detail
-
newBuilder
@PluginBuilderFactory public static <B extends RoutingAppender.Builder<B>> B newBuilder()
-
start
public void start()
Description copied from class:AbstractFilterableMake the Filter available for use.- Specified by:
startin interfaceLifeCycle- Overrides:
startin classAbstractFilterable
-
stop
public boolean stop(long timeout, java.util.concurrent.TimeUnit timeUnit)Description copied from class:AbstractFilterableCleanup the Filter.- Specified by:
stopin interfaceLifeCycle2- Overrides:
stopin classAbstractFilterable- Parameters:
timeout- the maximum time to waittimeUnit- the time unit of the timeout argument- Returns:
- true if the receiver was stopped cleanly and normally, false otherwise.
-
append
public void append(LogEvent event)
Description copied from interface:AppenderLogs a LogEvent using whatever logic this Appender wishes to use. It is typically recommended to use a bridge pattern not only for the benefits from decoupling an Appender from its implementation, but it is also handy for sharing resources which may require some form of locking.- Parameters:
event- The LogEvent.
-
updatePurgePolicy
private void updatePurgePolicy(java.lang.String key, LogEvent event)
-
getControl
private RoutingAppender.RouteAppenderControl getControl(java.lang.String key, LogEvent event)
-
getAppender
private RoutingAppender.RouteAppenderControl getAppender(java.lang.String key)
-
getAppenders
public java.util.Map<java.lang.String,AppenderControl> getAppenders()
Returns an unmodifiable view of the appenders created by thisRoutingAppender. Note that this map does not contain appenders that are routed by reference.
-
deleteAppender
public void deleteAppender(java.lang.String key)
Deletes the specified appender.- Parameters:
key- The appender's key
-
createAppender
@Deprecated public static RoutingAppender createAppender(java.lang.String name, java.lang.String ignore, Routes routes, Configuration config, RewritePolicy rewritePolicy, PurgePolicy purgePolicy, Filter filter)
Deprecated.Since 2.7; usenewBuilder()Creates a RoutingAppender.- Parameters:
name- The name of the Appender.ignore- If"true"(default) exceptions encountered when appending events are logged; otherwise they are propagated to the caller.routes- The routing definitions.config- The Configuration (automatically added by the Configuration).rewritePolicy- A RewritePolicy, if any.filter- A Filter to restrict events processed by the Appender or null.- Returns:
- The RoutingAppender
-
getDefaultRoute
public Route getDefaultRoute()
-
getDefaultRouteScript
public AbstractScript getDefaultRouteScript()
-
getPurgePolicy
public PurgePolicy getPurgePolicy()
-
getRewritePolicy
public RewritePolicy getRewritePolicy()
-
getRoutes
public Routes getRoutes()
-
getConfiguration
public Configuration getConfiguration()
-
getScriptStaticVariables
public java.util.concurrent.ConcurrentMap<java.lang.Object,java.lang.Object> getScriptStaticVariables()
-
-