4 * Generated from: yang module name: config-test yang module local name: testing
5 * Generated by: org.opendaylight.controller.config.yangjmxgenerator.plugin.JMXGenerator
6 * Generated at: Fri Sep 27 14:06:33 CEST 2013
8 * Do not modify this file unless it is present under src/main directory
10 package org.opendaylight.controller.config.yang.logback.config;
12 import java.io.Closeable;
13 import java.io.IOException;
16 import org.slf4j.LoggerFactory;
18 import ch.qos.logback.classic.Level;
19 import ch.qos.logback.classic.LoggerContext;
20 import ch.qos.logback.classic.encoder.PatternLayoutEncoder;
21 import ch.qos.logback.classic.filter.ThresholdFilter;
22 import ch.qos.logback.classic.spi.ILoggingEvent;
23 import ch.qos.logback.core.Appender;
24 import ch.qos.logback.core.rolling.FixedWindowRollingPolicy;
25 import ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy;
27 import com.google.common.base.Optional;
28 import com.google.common.base.Preconditions;
29 import com.google.common.collect.Sets;
32 * Implementation of {@link ContextSetter}. Resets running logback
35 public class ContextSetterImpl implements ContextSetter, Closeable {
37 private final LogbackStatusListener statusListener;
38 private static final org.slf4j.Logger classLogger = LoggerFactory
39 .getLogger(ContextSetterImpl.class);
41 public ContextSetterImpl(
42 LogbackRuntimeRegistrator rootRuntimeBeanRegistratorWrapper) {
43 statusListener = new LogbackStatusListener(
44 rootRuntimeBeanRegistratorWrapper);
45 statusListener.register();
48 public void updateContext(LogbackModule module) {
49 LoggerContext context = (LoggerContext) LoggerFactory
52 List<ch.qos.logback.classic.Logger> loggersBefore = context
55 createLoggers(context, module, Sets.newHashSet(loggersBefore));
58 private Map<String, Appender<ILoggingEvent>> createConsoleAppenders(
59 LoggerContext context, LogbackModule module) {
60 Map<String, Appender<ILoggingEvent>> appendersMap = new HashMap<>();
61 for (ConsoleAppenderTO appender : module.getConsoleAppenderTO()) {
62 Preconditions.checkState(
63 appendersMap.containsKey(appender.getName()) == false,
64 "Duplicate appender name %s", appender.getName());
65 ch.qos.logback.core.ConsoleAppender app = new ch.qos.logback.core.ConsoleAppender();
66 app.setContext(context);
67 PatternLayoutEncoder encoder = new PatternLayoutEncoder();
68 encoder.setContext(context);
69 encoder.setPattern(appender.getEncoderPattern());
71 app.setEncoder(encoder);
72 ThresholdFilter filter = new ThresholdFilter();
73 filter.setContext(context);
74 filter.setLevel(appender.getThresholdFilter());
76 app.getCopyOfAttachedFiltersList().add(filter);
77 app.setName(appender.getName());
79 appendersMap.put(app.getName(), app);
84 private void createLoggers(LoggerContext context, LogbackModule module,
85 Set<ch.qos.logback.classic.Logger> loggersBefore) {
87 Map<String, Appender<ILoggingEvent>> appendersMap = getAppenders(
90 for (LoggerTO logger : module.getLoggerTO()) {
91 classLogger.trace("Setting configuration for logger {}",
92 logger.getLoggerName());
93 final ch.qos.logback.classic.Logger logbackLogger = context
94 .getLogger(logger.getLoggerName());
96 Optional<Set<Appender<ILoggingEvent>>> appendersBefore = getAppendersBefore(
97 loggersBefore, logbackLogger);
98 classLogger.trace("Logger {}: Appenders registered before: {}",
99 logger.getLoggerName(),
100 appendersBefore.isPresent() ? appendersBefore.get()
101 : "NO APPENDERS BEFORE");
103 logbackLogger.setLevel(Level.toLevel(logger.getLevel()));
105 addNewAppenders(appendersMap, logger, logbackLogger,
107 removeBeforeAppenders(loggersBefore, logger, logbackLogger,
112 private void addNewAppenders(
113 Map<String, Appender<ILoggingEvent>> appendersMap, LoggerTO logger,
114 ch.qos.logback.classic.Logger logbackLogger,
115 Optional<Set<Appender<ILoggingEvent>>> appendersBefore) {
116 for (String appenderName : logger.getAppenders()) {
117 if (appendersMap.containsKey(appenderName)) {
118 logbackLogger.addAppender(appendersMap.get(appenderName));
119 classLogger.trace("Logger {}: Adding new appender: {}",
120 logger.getLoggerName(), appenderName);
122 throw new IllegalStateException(
125 + " found. This error should have been discovered by validation");
130 private void removeBeforeAppenders(
131 Set<ch.qos.logback.classic.Logger> loggersBefore, LoggerTO logger,
132 ch.qos.logback.classic.Logger logbackLogger,
133 Optional<Set<Appender<ILoggingEvent>>> appendersBefore) {
134 if (appendersBefore.isPresent()) {
135 for (Appender<ILoggingEvent> appenderBefore : appendersBefore.get()) {
136 logbackLogger.detachAppender(appenderBefore);
137 appenderBefore.stop();
138 classLogger.trace("Logger {}: Removing old appender: {}",
139 logger.getLoggerName(), appenderBefore.getName());
141 loggersBefore.remove(logbackLogger);
145 private Optional<Set<Appender<ILoggingEvent>>> getAppendersBefore(
146 Set<ch.qos.logback.classic.Logger> loggersBefore,
147 ch.qos.logback.classic.Logger logbackLogger) {
148 if (loggersBefore.contains(logbackLogger)) {
149 Iterator<Appender<ILoggingEvent>> appenderIt = logbackLogger
150 .iteratorForAppenders();
151 Set<Appender<ILoggingEvent>> appendersBefore = Sets.newHashSet();
152 while (appenderIt.hasNext()) {
153 appendersBefore.add(appenderIt.next());
155 return Optional.of(appendersBefore);
157 return Optional.absent();
161 private Map<String, Appender<ILoggingEvent>> getAppenders(
162 LogbackModule module, LoggerContext context) {
163 Map<String, Appender<ILoggingEvent>> appendersMap = new HashMap<>();
164 addAllAppenders(appendersMap, createRollingAppenders(context, module));
165 addAllAppenders(appendersMap, createConsoleAppenders(context, module));
170 private void addAllAppenders(
171 Map<String, Appender<ILoggingEvent>> allAppenders,
172 Map<String, Appender<ILoggingEvent>> appendersToAdd) {
173 for (String appenderName : appendersToAdd.keySet()) {
174 Preconditions.checkState(
175 allAppenders.containsKey(appenderName) == false,
176 "Duplicate appender name %s", appenderName);
177 allAppenders.put(appenderName, appendersToAdd.get(appenderName));
181 private Map<String, Appender<ILoggingEvent>> createRollingAppenders(
182 LoggerContext context, LogbackModule module) {
183 Map<String, Appender<ILoggingEvent>> appendersMap = new HashMap<>();
184 for (RollingFileAppenderTO appender : module.getRollingFileAppenderTO()) {
185 Preconditions.checkState(
186 appendersMap.containsKey(appender.getName()) == false,
187 "Duplicate appender name %s", appender.getName());
188 ch.qos.logback.core.rolling.RollingFileAppender app = new ch.qos.logback.core.rolling.RollingFileAppender<>();
189 app.setAppend(appender.getAppend());
190 app.setContext(context);
191 PatternLayoutEncoder encoder = new PatternLayoutEncoder();
192 encoder.setContext(context);
193 encoder.setPattern(appender.getEncoderPattern());
195 app.setEncoder(encoder);
196 app.setFile(appender.getFileName());
197 FixedWindowRollingPolicy policy = new FixedWindowRollingPolicy();
198 policy.setContext(context);
199 policy.setMaxIndex(appender.getMaxIndex());
200 policy.setMinIndex(appender.getMinIndex());
201 policy.setFileNamePattern(appender.getFileNamePattern());
202 policy.setParent(app);
204 app.setRollingPolicy(policy);
205 SizeBasedTriggeringPolicy triggeringPolicy = new SizeBasedTriggeringPolicy();
206 triggeringPolicy.setContext(context);
207 triggeringPolicy.setMaxFileSize(appender.getMaxFileSize());
208 triggeringPolicy.start();
209 app.setTriggeringPolicy(triggeringPolicy);
210 app.setName(appender.getName());
212 appendersMap.put(app.getName(), app);
218 public void close() throws IOException {
219 statusListener.close();