View Javadoc
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  }