org.apache.juli.logging.ch.qos.logback.core.model.processor.AppenderRefModelHandler Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of tomcat85-slf4j-logback Show documentation
Show all versions of tomcat85-slf4j-logback Show documentation
Tomcat85 Slf4j Logback Integration
package org.apache.juli.logging.ch.qos.logback.core.model.processor;
import java.util.Map;
import org.apache.juli.logging.ch.qos.logback.core.Appender;
import org.apache.juli.logging.ch.qos.logback.core.Context;
import org.apache.juli.logging.ch.qos.logback.core.joran.JoranConstants;
import org.apache.juli.logging.ch.qos.logback.core.model.AppenderRefModel;
import org.apache.juli.logging.ch.qos.logback.core.model.Model;
import org.apache.juli.logging.ch.qos.logback.core.spi.AppenderAttachable;
public class AppenderRefModelHandler extends ModelHandlerBase {
boolean inError = false;
public AppenderRefModelHandler(Context context) {
super(context);
}
static public ModelHandlerBase makeInstance(Context context, ModelInterpretationContext ic) {
return new AppenderRefModelHandler(context);
}
@Override
protected Class getSupportedModelClass() {
return AppenderRefModel.class;
}
@Override
public void handle(ModelInterpretationContext interpContext, Model model) throws ModelHandlerException {
Object o = interpContext.peekObject();
if (!(o instanceof AppenderAttachable)) {
inError = true;
String errMsg = "Could not find an AppenderAttachable at the top of execution stack. Near "
+ model.idString();
addError(errMsg);
return;
}
AppenderRefModel appenderRefModel = (AppenderRefModel) model;
AppenderAttachable appenderAttachable = (AppenderAttachable) o;
attachRefencedAppenders(interpContext, appenderRefModel, appenderAttachable);
}
@SuppressWarnings({ "unchecked", "rawtypes" })
void attachRefencedAppenders(ModelInterpretationContext mic, AppenderRefModel appenderRefModel,
AppenderAttachable appenderAttachable) {
String appenderName = mic.subst(appenderRefModel.getRef());
Map appenderBag = (Map) mic.getObjectMap().get(JoranConstants.APPENDER_BAG);
Appender appender = appenderBag.get(appenderName);
if (appender == null) {
addError("Failed to find appender named [" + appenderName + "]");
} else {
addInfo("Attaching appender named [" + appenderName + "] to " + appenderAttachable);
appenderAttachable.addAppender(appender);
}
}
}