4 * Generated by: org.opendaylight.controller.config.yangjmxgenerator.plugin.JMXGenerator
5 * Generated at: Wed Jul 17 15:26:45 CEST 2013
7 * Do not modifiy this file unless it is present under src/main directory
9 package org.opendaylight.controller.config.yang.logback.config;
12 import java.util.Map.Entry;
14 import org.apache.commons.lang3.StringUtils;
15 import org.opendaylight.controller.config.api.DependencyResolver;
16 import org.opendaylight.controller.config.api.ModuleIdentifier;
17 import org.slf4j.LoggerFactory;
19 import ch.qos.logback.classic.Logger;
20 import ch.qos.logback.classic.LoggerContext;
21 import ch.qos.logback.classic.encoder.PatternLayoutEncoder;
22 import ch.qos.logback.classic.spi.ILoggingEvent;
23 import ch.qos.logback.classic.spi.LoggerComparator;
24 import ch.qos.logback.core.Appender;
25 import ch.qos.logback.core.rolling.FixedWindowRollingPolicy;
26 import ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy;
27 import ch.qos.logback.core.rolling.TimeBasedRollingPolicy;
29 import com.google.common.base.Preconditions;
30 import com.google.common.collect.Lists;
35 public class LogbackModuleFactory extends
36 org.opendaylight.controller.config.yang.logback.config.AbstractLogbackModuleFactory {
38 private static final String INSTANCE_NAME = "singleton";
39 private Map<String, LoggerTO> loggersDTOs;
40 private Map<String, RollingFileAppenderTO> rollingDTOs;
41 private Map<String, ConsoleAppenderTO> consoleDTOs;
42 private Map<String, FileAppenderTO> fileDTOs;
45 public LogbackModule instantiateModule(String instanceName, DependencyResolver dependencyResolver) {
46 Preconditions.checkArgument(instanceName.equals(INSTANCE_NAME),
47 "There should be just one instance of logback, named " + INSTANCE_NAME);
49 LogbackModule module = new LogbackModule(new ModuleIdentifier(getImplementationName(), INSTANCE_NAME),
51 module.setFileAppenderTO(Lists.newArrayList(fileDTOs.values()));
52 module.setConsoleAppenderTO(Lists.newArrayList(consoleDTOs.values()));
53 module.setRollingFileAppenderTO(Lists.newArrayList(rollingDTOs.values()));
54 module.setLoggerTO(Lists.newArrayList(loggersDTOs.values()));
59 public LogbackModule instantiateModule(String instanceName, DependencyResolver dependencyResolver,
60 LogbackModule oldModule, AutoCloseable oldInstance) {
61 Preconditions.checkArgument(instanceName.equals(INSTANCE_NAME),
62 "There should be just one instance of logback, named " + INSTANCE_NAME);
64 LogbackModule module = new LogbackModule(new ModuleIdentifier(getImplementationName(), INSTANCE_NAME),
65 dependencyResolver, oldModule, oldInstance);
66 module.setConsoleAppenderTO(Lists.newArrayList(consoleDTOs.values()));
68 * module.setJCloudsAppender(Lists.newArrayList(jcloudsDTOs.values()));
70 module.setFileAppenderTO(Lists.newArrayList(fileDTOs.values()));
71 module.setRollingFileAppenderTO(Lists.newArrayList(rollingDTOs.values()));
72 module.setLoggerTO(Lists.newArrayList(loggersDTOs.values()));
76 private void prepareDTOs() {
77 LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory();
78 this.loggersDTOs = prepareLoggersDTOs(context);
79 prepareAppendersDTOs(context);
82 private void prepareAppendersDTOs(LoggerContext context) {
83 this.rollingDTOs = new HashMap<>();
84 this.consoleDTOs = new HashMap<>();
85 this.fileDTOs = new HashMap<>();
86 ch.qos.logback.core.rolling.RollingFileAppender<ILoggingEvent> rollingApp;
87 ch.qos.logback.core.ConsoleAppender<ILoggingEvent> consoleApp;
88 ch.qos.logback.core.FileAppender<ILoggingEvent> fileApp;
89 Map<Logger, List<Appender<ILoggingEvent>>> appendersAll = new HashMap<>();
90 for (Logger log : context.getLoggerList()) {
91 List<Appender<ILoggingEvent>> appenders = new ArrayList<>();
92 Iterator<Appender<ILoggingEvent>> iter = log.iteratorForAppenders();
93 while (iter.hasNext()) {
94 Appender<ILoggingEvent> element = iter.next();
95 appenders.add(element);
97 appendersAll.put(log, appenders);
99 for (List<ch.qos.logback.core.Appender<ILoggingEvent>> appEntry : appendersAll.values()) {
100 for (ch.qos.logback.core.Appender<ILoggingEvent> appender : appEntry) {
101 if (appender instanceof ch.qos.logback.core.rolling.RollingFileAppender<?>) {
102 RollingFileAppenderTO app = new RollingFileAppenderTO();
103 rollingApp = (ch.qos.logback.core.rolling.RollingFileAppender<ILoggingEvent>) appender;
104 app.setAppend(rollingApp.isAppend());
105 PatternLayoutEncoder encoder = (PatternLayoutEncoder) rollingApp.getEncoder();
106 app.setEncoderPattern(encoder.getPattern());
107 app.setFileName(rollingApp.getFile());
108 if (rollingApp.getRollingPolicy() instanceof FixedWindowRollingPolicy) {
109 FixedWindowRollingPolicy rollingPolicy = (FixedWindowRollingPolicy) rollingApp
111 app.setMaxIndex(rollingPolicy.getMaxIndex());
112 app.setMinIndex(rollingPolicy.getMinIndex());
113 app.setFileNamePattern(rollingPolicy.getFileNamePattern());
114 app.setRollingPolicyType("FixedWindowRollingPolicy");
115 } else if (rollingApp.getRollingPolicy() instanceof TimeBasedRollingPolicy<?>) {
116 TimeBasedRollingPolicy rollingPolicy = (TimeBasedRollingPolicy) rollingApp.getRollingPolicy();
117 app.setRollingPolicyType("TimeBasedRollingPolicy");
118 app.setFileNamePattern(rollingPolicy.getFileNamePattern());
119 app.setMaxHistory(rollingPolicy.getMaxHistory());
120 app.setCleanHistoryOnStart(rollingPolicy.isCleanHistoryOnStart());
122 SizeBasedTriggeringPolicy<ILoggingEvent> triggeringPolicy = (SizeBasedTriggeringPolicy<ILoggingEvent>) rollingApp
123 .getTriggeringPolicy();
124 app.setMaxFileSize(triggeringPolicy.getMaxFileSize());
125 app.setName(rollingApp.getName());
126 this.rollingDTOs.put(rollingApp.getName(), app);
127 } else if (appender instanceof ch.qos.logback.core.FileAppender<?>) {
128 FileAppenderTO app = new FileAppenderTO();
129 fileApp = (ch.qos.logback.core.FileAppender<ILoggingEvent>) appender;
130 app.setName(fileApp.getName());
131 app.setAppend(fileApp.isAppend());
132 app.setFileName(fileApp.getFile());
133 PatternLayoutEncoder encoder = (PatternLayoutEncoder) fileApp.getEncoder();
134 app.setEncoderPattern(encoder.getPattern());
135 this.fileDTOs.put(fileApp.getName(), app);
137 if (appender instanceof ch.qos.logback.core.ConsoleAppender<?>) {
138 ConsoleAppenderTO app = new ConsoleAppenderTO();
139 consoleApp = (ch.qos.logback.core.ConsoleAppender<ILoggingEvent>) appender;
140 consoleApp.getCopyOfAttachedFiltersList();
141 PatternLayoutEncoder encoder = (PatternLayoutEncoder) consoleApp.getEncoder();
142 app.setEncoderPattern(encoder.getPattern());
143 app.setName(consoleApp.getName());
144 app.setThresholdFilter(context.getLogger(Logger.ROOT_LOGGER_NAME).getEffectiveLevel().levelStr);
145 this.consoleDTOs.put(consoleApp.getName(), app);
151 private Map<String, LoggerTO> prepareLoggersDTOs(LoggerContext context) {
152 Map<String, LoggerTO> DTOs = new HashMap<>();
153 List<String> appenders = new ArrayList<>();
154 List<org.slf4j.Logger> loggersToBeAdd = removeUnusableLoggers(context.getLoggerList(),
155 context.getLogger(Logger.ROOT_LOGGER_NAME));
156 for (org.slf4j.Logger log : loggersToBeAdd) {
157 LoggerTO logger = new LoggerTO();
158 if (((Logger) log).getLevel() != null)
159 logger.setLevel(((Logger) log).getLevel().levelStr);
161 logger.setLevel(((Logger) log).getEffectiveLevel().levelStr);
162 logger.setLoggerName(log.getName());
163 Iterator<Appender<ILoggingEvent>> iter = ((Logger) log).iteratorForAppenders();
164 while (iter.hasNext()) {
165 Appender<ILoggingEvent> element = iter.next();
166 appenders.add(element.getName());
168 logger.setAppenders(appenders);
169 DTOs.put(log.getName(), logger);
170 appenders = new ArrayList<>();
176 private List<org.slf4j.Logger> removeUnusableLoggers(List<Logger> loggerList, Logger rootLogger) {
177 Collections.sort(loggerList, new LoggerComparator());
178 Map<String, org.slf4j.Logger> loggersToReturn = new HashMap<>();
180 for (org.slf4j.Logger log : loggerList) {
181 boolean shouldAdd = true;
182 for (Entry<String, org.slf4j.Logger> entry : loggersToReturn.entrySet()) {
183 if (StringUtils.contains(log.getName(), entry.getKey())) {
184 if (((Logger) log).getLevel() != null
185 && ((Logger) log).getLevel().equals(((Logger) entry.getValue()).getLevel())
186 && !((Logger) log).iteratorForAppenders().hasNext()) {
190 if (((Logger) log).getLevel() == null
191 && ((Logger) log).getEffectiveLevel().equals(
192 ((Logger) entry.getValue()).getEffectiveLevel())
193 && !((Logger) log).iteratorForAppenders().hasNext()) {
198 if (((Logger) log).getLevel() != null && ((Logger) log).getLevel().equals(rootLogger.getLevel())
199 && !((Logger) log).iteratorForAppenders().hasNext()) {
203 if (((Logger) log).getLevel() == null
204 && ((Logger) log).getEffectiveLevel().equals(rootLogger.getEffectiveLevel())
205 && !((Logger) log).iteratorForAppenders().hasNext()) {
211 loggersToReturn.put(log.getName(), log);
214 return Lists.newArrayList(loggersToReturn.values());