Search in sources :

Example 1 with EventRoute

use of org.apache.logging.log4j.core.async.EventRoute in project logging-log4j2 by apache.

the class AsyncAppender method append.

/**
 * Actual writing occurs here.
 *
 * @param logEvent The LogEvent.
 */
@Override
public void append(final LogEvent logEvent) {
    if (!isStarted()) {
        throw new IllegalStateException("AsyncAppender " + getName() + " is not active");
    }
    final Log4jLogEvent memento = Log4jLogEvent.createMemento(logEvent, includeLocation);
    InternalAsyncUtil.makeMessageImmutable(logEvent.getMessage());
    if (!transfer(memento)) {
        if (blocking) {
            if (AbstractLogger.getRecursionDepth() > 1) {
                // LOG4J2-1518, LOG4J2-2031
                // If queue is full AND we are in a recursive call, call appender directly to prevent deadlock
                AsyncQueueFullMessageUtil.logWarningToStatusLogger();
                logMessageInCurrentThread(logEvent);
            } else {
                // delegate to the event router (which may discard, enqueue and block, or log in current thread)
                final EventRoute route = asyncQueueFullPolicy.getRoute(dispatcher.getId(), memento.getLevel());
                route.logMessage(this, memento);
            }
        } else {
            error("Appender " + getName() + " is unable to write primary appenders. queue is full");
            logToErrorAppenderIfNecessary(false, memento);
        }
    }
}
Also used : Log4jLogEvent(org.apache.logging.log4j.core.impl.Log4jLogEvent) EventRoute(org.apache.logging.log4j.core.async.EventRoute)

Aggregations

EventRoute (org.apache.logging.log4j.core.async.EventRoute)1 Log4jLogEvent (org.apache.logging.log4j.core.impl.Log4jLogEvent)1