1 package ch.qos.logback.classic.model.processor; 2 3 import ch.qos.logback.classic.Level; 4 import ch.qos.logback.classic.Logger; 5 import ch.qos.logback.classic.LoggerContext; 6 import ch.qos.logback.classic.model.RootLoggerModel; 7 import ch.qos.logback.core.Context; 8 import ch.qos.logback.core.model.Model; 9 import ch.qos.logback.core.model.processor.ModelHandlerBase; 10 import ch.qos.logback.core.model.processor.ModelHandlerException; 11 import ch.qos.logback.core.model.processor.ModelInterpretationContext; 12 import ch.qos.logback.core.util.OptionHelper; 13 14 public class RootLoggerModelHandler extends ModelHandlerBase { 15 16 Logger root; 17 boolean inError = false; 18 19 public RootLoggerModelHandler(Context context) { 20 super(context); 21 } 22 23 static public RootLoggerModelHandler makeInstance(Context context, ModelInterpretationContext ic) { 24 return new RootLoggerModelHandler(context); 25 } 26 27 protected Class<RootLoggerModel> getSupportedModelClass() { 28 return RootLoggerModel.class; 29 } 30 31 @Override 32 public void handle(ModelInterpretationContext mic, Model model) throws ModelHandlerException { 33 inError = false; 34 35 RootLoggerModel rootLoggerModel = (RootLoggerModel) model; 36 37 LoggerContext loggerContext = (LoggerContext) this.context; 38 root = loggerContext.getLogger(Logger.ROOT_LOGGER_NAME); 39 40 String levelStr = mic.subst(rootLoggerModel.getLevel()); 41 if (!OptionHelper.isNullOrEmptyOrAllSpaces(levelStr)) { 42 Level level = Level.toLevel(levelStr); 43 addInfo("Setting level of ROOT logger to " + level); 44 root.setLevel(level); 45 } 46 47 mic.pushObject(root); 48 } 49 50 @Override 51 public void postHandle(ModelInterpretationContext mic, Model model) { 52 if (inError) { 53 return; 54 } 55 Object o = mic.peekObject(); 56 if (o != root) { 57 addWarn("The object [" + o + "] on the top the of the stack is not the root logger"); 58 } else { 59 mic.popObject(); 60 } 61 } 62 63 }