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 }