1
2
3
4
5
6
7
8
9
10
11
12
13
14 package ch.qos.logback.classic.joran;
15
16 import ch.qos.logback.classic.joran.action.ConfigurationAction;
17 import ch.qos.logback.classic.joran.action.ConsolePluginAction;
18 import ch.qos.logback.classic.joran.action.ContextNameAction;
19 import ch.qos.logback.classic.joran.action.InsertFromJNDIAction;
20 import ch.qos.logback.classic.joran.action.LevelAction;
21 import ch.qos.logback.classic.joran.action.LoggerAction;
22 import ch.qos.logback.classic.joran.action.LoggerContextListenerAction;
23 import ch.qos.logback.classic.joran.action.ReceiverAction;
24 import ch.qos.logback.classic.joran.action.RootLoggerAction;
25 import ch.qos.logback.classic.model.ConfigurationModel;
26 import ch.qos.logback.classic.model.ContextNameModel;
27 import ch.qos.logback.classic.model.LevelModel;
28 import ch.qos.logback.classic.model.LoggerContextListenerModel;
29 import ch.qos.logback.classic.model.LoggerModel;
30 import ch.qos.logback.classic.model.RootLoggerModel;
31 import ch.qos.logback.classic.model.processor.ConfigurationModelHandler;
32 import ch.qos.logback.classic.model.processor.ContextNameModelHandler;
33 import ch.qos.logback.classic.model.processor.LevelModelHandler;
34 import ch.qos.logback.classic.model.processor.LogbackClassicDefaultNestedComponentRules;
35 import ch.qos.logback.classic.model.processor.LoggerContextListenerModelHandler;
36 import ch.qos.logback.classic.model.processor.LoggerModelHandler;
37 import ch.qos.logback.classic.model.processor.RootLoggerModelHandler;
38 import ch.qos.logback.classic.spi.ILoggingEvent;
39 import ch.qos.logback.classic.spi.PlatformInfo;
40 import ch.qos.logback.core.joran.JoranConfiguratorBase;
41 import ch.qos.logback.core.joran.action.AppenderRefAction;
42 import ch.qos.logback.core.joran.action.IncludeAction;
43 import ch.qos.logback.core.joran.spi.DefaultNestedComponentRegistry;
44 import ch.qos.logback.core.joran.spi.ElementSelector;
45 import ch.qos.logback.core.joran.spi.RuleStore;
46 import ch.qos.logback.core.model.AppenderModel;
47 import ch.qos.logback.core.model.AppenderRefModel;
48 import ch.qos.logback.core.model.processor.AppenderModelHandler;
49 import ch.qos.logback.core.model.processor.AppenderRefDependencyAnalyser;
50 import ch.qos.logback.core.model.processor.AppenderRefModelHandler;
51 import ch.qos.logback.core.model.processor.DefaultProcessor;
52 import ch.qos.logback.core.model.processor.RefContainerDependencyAnalyser;
53
54
55
56
57
58
59 public class JoranConfigurator extends JoranConfiguratorBase<ILoggingEvent> {
60
61 @Override
62 public void addElementSelectorAndActionAssociations(RuleStore rs) {
63
64 super.addElementSelectorAndActionAssociations(rs);
65
66 rs.addRule(new ElementSelector("configuration"), () -> new ConfigurationAction());
67
68 rs.addRule(new ElementSelector("configuration/contextName"), () -> new ContextNameAction());
69 rs.addRule(new ElementSelector("configuration/contextListener"), () -> new LoggerContextListenerAction());
70 rs.addRule(new ElementSelector("configuration/insertFromJNDI"), () -> new InsertFromJNDIAction());
71
72 rs.addRule(new ElementSelector("configuration/logger"), () -> new LoggerAction());
73 rs.addRule(new ElementSelector("configuration/logger/level"), () -> new LevelAction());
74
75 rs.addRule(new ElementSelector("configuration/root"), () -> new RootLoggerAction());
76 rs.addRule(new ElementSelector("configuration/root/level"), () -> new LevelAction());
77 rs.addRule(new ElementSelector("configuration/logger/appender-ref"), () -> new AppenderRefAction());
78 rs.addRule(new ElementSelector("configuration/root/appender-ref"), () -> new AppenderRefAction());
79
80 rs.addRule(new ElementSelector("configuration/include"), () -> new IncludeAction());
81
82 rs.addRule(new ElementSelector("configuration/consolePlugin"), () -> new ConsolePluginAction());
83
84 rs.addRule(new ElementSelector("configuration/receiver"), () -> new ReceiverAction());
85
86 }
87
88 @Override
89 protected void addDefaultNestedComponentRegistryRules(DefaultNestedComponentRegistry registry) {
90 LogbackClassicDefaultNestedComponentRules.addDefaultNestedComponentRegistryRules(registry);
91 }
92
93 @Override
94 protected void addModelHandlerAssociations(DefaultProcessor defaultProcessor) {
95 super.addModelHandlerAssociations(defaultProcessor);
96 defaultProcessor.addHandler(ConfigurationModel.class, ConfigurationModelHandler::makeInstance);
97 defaultProcessor.addHandler(ContextNameModel.class, ContextNameModelHandler::makeInstance);
98 defaultProcessor.addHandler(LoggerContextListenerModel.class, LoggerContextListenerModelHandler::makeInstance);
99
100 defaultProcessor.addHandler(AppenderModel.class, AppenderModelHandler::makeInstance);
101 defaultProcessor.addHandler(AppenderRefModel.class, AppenderRefModelHandler::makeInstance);
102 defaultProcessor.addHandler(RootLoggerModel.class, RootLoggerModelHandler::makeInstance);
103 defaultProcessor.addHandler(LoggerModel.class, LoggerModelHandler::makeInstance);
104 defaultProcessor.addHandler(LevelModel.class, LevelModelHandler::makeInstance);
105
106 defaultProcessor.addAnalyser(LoggerModel.class,
107 () -> new RefContainerDependencyAnalyser(context, LoggerModel.class));
108
109 defaultProcessor.addAnalyser(RootLoggerModel.class,
110 () -> new RefContainerDependencyAnalyser(context, RootLoggerModel.class));
111
112 defaultProcessor.addAnalyser(AppenderModel.class,
113 () -> new RefContainerDependencyAnalyser(context, AppenderModel.class));
114
115 defaultProcessor.addAnalyser(AppenderRefModel.class,
116 () -> new AppenderRefDependencyAnalyser(context));
117
118 sealModelFilters(defaultProcessor);
119 }
120
121
122
123
124
125
126 private void sealModelFilters(DefaultProcessor defaultProcessor) {
127 defaultProcessor.getPhaseOneFilter().denyAll();
128 defaultProcessor.getPhaseTwoFilter().allowAll();
129 }
130
131 }