1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package ch.qos.logback.classic.model.processor;
16
17 import static ch.qos.logback.core.joran.JoranConstants.NULL;
18
19 import ch.qos.logback.classic.Level;
20 import ch.qos.logback.classic.Logger;
21 import ch.qos.logback.classic.LoggerContext;
22 import ch.qos.logback.classic.model.LoggerModel;
23 import ch.qos.logback.core.Context;
24 import ch.qos.logback.core.joran.JoranConstants;
25 import ch.qos.logback.core.model.Model;
26 import ch.qos.logback.core.model.processor.ModelHandlerBase;
27 import ch.qos.logback.core.model.processor.ModelHandlerException;
28 import ch.qos.logback.core.model.processor.ModelInterpretationContext;
29 import ch.qos.logback.core.spi.ErrorCodes;
30 import ch.qos.logback.core.util.OptionHelper;
31
32 public class LoggerModelHandler extends ModelHandlerBase {
33
34 Logger logger;
35 boolean inError = false;
36
37 public LoggerModelHandler(Context context) {
38 super(context);
39 }
40
41 static public ModelHandlerBase makeInstance(Context context, ModelInterpretationContext mic) {
42 return new LoggerModelHandler(context);
43 }
44
45 protected Class<LoggerModel> getSupportedModelClass() {
46 return LoggerModel.class;
47 }
48
49 @Override
50 public void handle(ModelInterpretationContext mic, Model model) throws ModelHandlerException {
51 inError = false;
52
53 LoggerModel loggerModel = (LoggerModel) model;
54
55 String finalLoggerName = mic.subst(loggerModel.getName());
56
57 LoggerContext loggerContext = (LoggerContext) this.context;
58
59 logger = loggerContext.getLogger(finalLoggerName);
60
61 String levelStr = mic.subst(loggerModel.getLevel());
62 if (!OptionHelper.isNullOrEmptyOrAllSpaces(levelStr)) {
63 if (JoranConstants.INHERITED.equalsIgnoreCase(levelStr) || NULL.equalsIgnoreCase(levelStr)) {
64 if(Logger.ROOT_LOGGER_NAME.equalsIgnoreCase(finalLoggerName)) {
65 addError(ErrorCodes.ROOT_LEVEL_CANNOT_BE_SET_TO_NULL);
66 } else {
67 addInfo("Setting level of logger [" + finalLoggerName + "] to null, i.e. INHERITED");
68 logger.setLevel(null);
69 }
70 } else {
71 Level level = Level.toLevel(levelStr);
72 addInfo("Setting level of logger [" + finalLoggerName + "] to " + level);
73 logger.setLevel(level);
74 }
75 }
76
77 String additivityStr = mic.subst(loggerModel.getAdditivity());
78 if (!OptionHelper.isNullOrEmptyOrAllSpaces(additivityStr)) {
79 boolean additive = OptionHelper.toBoolean(additivityStr, true);
80 addInfo("Setting additivity of logger [" + finalLoggerName + "] to " + additive);
81 logger.setAdditive(additive);
82 }
83
84 mic.pushObject(logger);
85 }
86
87 @Override
88 public void postHandle(ModelInterpretationContext mic, Model model) {
89 if (inError) {
90 return;
91 }
92 Object o = mic.peekObject();
93 if (o != logger) {
94 LoggerModel loggerModel = (LoggerModel) model;
95 addWarn("The object [" + o + "] on the top the of the stack is not the expected logger named "
96 + loggerModel.getName());
97 } else {
98 mic.popObject();
99 }
100
101 }
102
103 }