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