// Synchronized since this delivers events to the downstreamAppender -- and the downstreamAppender
// is shared among ALL loggers
private synchronized void consolidateEventsAndForward(String loggerName) {
// TODO Add support to multiple appenders
Appender downstreamAppender = (Appender)appenders.getAllAppenders().nextElement();
List<LoggingEvent> existingEvents = cachedEvents.remove(loggerName);
if (CollectionUtils.isNotEmpty(existingEvents)) {
LoggingEvent eventToSendDownstream;
if (existingEvents.size() == 1) {
eventToSendDownstream = existingEvents.get(0);
} else {
eventToSendDownstream = consolidatedEvent(existingEvents, downstreamAppender.getLayout());
}
// To deliver the consolidated event to the downstream appender, we temporarily
// remove and then reinstate the DenyAllFilter
downstreamAppender.clearFilters();
downstreamAppender.doAppend(eventToSendDownstream);
downstreamAppender.addFilter(new DenyAllFilter());
}
}