1 package ch.qos.logback.classic.model.processor; 2 3 import static ch.qos.logback.core.joran.JoranConstants.INHERITED; 4 import static ch.qos.logback.core.joran.JoranConstants.NULL; 5 6 import ch.qos.logback.classic.Level; 7 import ch.qos.logback.classic.Logger; 8 import ch.qos.logback.classic.model.LevelModel; 9 import ch.qos.logback.core.Context; 10 import ch.qos.logback.core.model.Model; 11 import ch.qos.logback.core.model.processor.ModelHandlerBase; 12 import ch.qos.logback.core.model.processor.ModelHandlerException; 13 import ch.qos.logback.core.model.processor.ModelInterpretationContext; 14 import ch.qos.logback.core.spi.ErrorCodes; 15 16 public class LevelModelHandler extends ModelHandlerBase { 17 18 boolean inError = false; 19 20 public LevelModelHandler(Context context) { 21 super(context); 22 } 23 24 static public ModelHandlerBase makeInstance(Context context, ModelInterpretationContext ic) { 25 return new LevelModelHandler(context); 26 } 27 28 @Override 29 protected Class<? extends LevelModel> getSupportedModelClass() { 30 return LevelModel.class; 31 } 32 33 @Override 34 public void handle(ModelInterpretationContext mic, Model model) throws ModelHandlerException { 35 36 Object o = mic.peekObject(); 37 38 if (!(o instanceof Logger)) { 39 inError = true; 40 addError("For element <level>, could not find a logger at the top of execution stack."); 41 return; 42 } 43 44 Logger l = (Logger) o; 45 String loggerName = l.getName(); 46 47 LevelModel levelModel = (LevelModel) model; 48 String levelStr = mic.subst(levelModel.getValue()); 49 if (INHERITED.equalsIgnoreCase(levelStr) || NULL.equalsIgnoreCase(levelStr)) { 50 if(Logger.ROOT_LOGGER_NAME.equalsIgnoreCase(loggerName)) 51 addError(ErrorCodes.ROOT_LEVEL_CANNOT_BE_SET_TO_NULL); 52 else 53 l.setLevel(null); 54 } else { 55 l.setLevel(Level.toLevel(levelStr, Level.DEBUG)); 56 } 57 58 addInfo(loggerName + " level set to " + l.getLevel()); 59 60 } 61 62 }