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;
11 import ch.qos.logback.classic.Logger;
12 import ch.qos.logback.classic.LoggerContext;
13 import ch.qos.logback.classic.encoder.PatternLayoutEncoder;
14 import ch.qos.logback.classic.spi.ILoggingEvent;
15 import ch.qos.logback.classic.spi.LoggerComparator;
16 import ch.qos.logback.core.Appender;
17 import ch.qos.logback.core.rolling.FixedWindowRollingPolicy;
18 import ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy;
19 import ch.qos.logback.core.rolling.TimeBasedRollingPolicy;
20 import com.google.common.base.Preconditions;
21 import com.google.common.collect.Lists;
22 import org.apache.commons.lang3.StringUtils;
23 import org.opendaylight.controller.config.api.DependencyResolver;
24 import org.opendaylight.controller.config.api.ModuleIdentifier;
25 import org.osgi.framework.BundleContext;
26 import org.slf4j.LoggerFactory;
29 import java.util.Map.Entry;
34 public class LogbackModuleFactory extends
35 org.opendaylight.controller.config.yang.logback.config.AbstractLogbackModuleFactory {
37 private static final String INSTANCE_NAME = "singleton";
38 private Map<String, LoggerTO> loggersDTOs;
39 private Map<String, RollingFileAppenderTO> rollingDTOs;
40 private Map<String, ConsoleAppenderTO> consoleDTOs;
41 private Map<String, FileAppenderTO> fileDTOs;
44 public LogbackModule instantiateModule(String instanceName,
45 DependencyResolver dependencyResolver, BundleContext bundleContext) {
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,
60 DependencyResolver dependencyResolver, LogbackModule oldModule,
61 AutoCloseable oldInstance, BundleContext bundleContext) {
62 Preconditions.checkArgument(instanceName.equals(INSTANCE_NAME),
63 "There should be just one instance of logback, named " + INSTANCE_NAME);
65 LogbackModule module = new LogbackModule(new ModuleIdentifier(getImplementationName(), INSTANCE_NAME),
66 dependencyResolver, oldModule, oldInstance);
67 module.setConsoleAppenderTO(Lists.newArrayList(consoleDTOs.values()));
69 * module.setJCloudsAppender(Lists.newArrayList(jcloudsDTOs.values()));
71 module.setFileAppenderTO(Lists.newArrayList(fileDTOs.values()));
72 module.setRollingFileAppenderTO(Lists.newArrayList(rollingDTOs.values()));
73 module.setLoggerTO(Lists.newArrayList(loggersDTOs.values()));
77 private void prepareDTOs() {
78 LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory();
79 this.loggersDTOs = prepareLoggersDTOs(context);
80 prepareAppendersDTOs(context);
83 private void prepareAppendersDTOs(LoggerContext context) {
84 this.rollingDTOs = new HashMap<>();
85 this.consoleDTOs = new HashMap<>();
86 this.fileDTOs = new HashMap<>();
87 ch.qos.logback.core.rolling.RollingFileAppender<ILoggingEvent> rollingApp;
88 ch.qos.logback.core.ConsoleAppender<ILoggingEvent> consoleApp;
89 ch.qos.logback.core.FileAppender<ILoggingEvent> fileApp;
90 Map<Logger, List<Appender<ILoggingEvent>>> appendersAll = new HashMap<>();
91 for (Logger log : context.getLoggerList()) {
92 List<Appender<ILoggingEvent>> appenders = new ArrayList<>();
93 Iterator<Appender<ILoggingEvent>> iter = log.iteratorForAppenders();
94 while (iter.hasNext()) {
95 Appender<ILoggingEvent> element = iter.next();
96 appenders.add(element);
98 appendersAll.put(log, appenders);
100 for (List<ch.qos.logback.core.Appender<ILoggingEvent>> appEntry : appendersAll.values()) {
101 for (ch.qos.logback.core.Appender<ILoggingEvent> appender : appEntry) {
102 if (appender instanceof ch.qos.logback.core.rolling.RollingFileAppender<?>) {
103 RollingFileAppenderTO app = new RollingFileAppenderTO();
104 rollingApp = (ch.qos.logback.core.rolling.RollingFileAppender<ILoggingEvent>) appender;
105 app.setAppend(rollingApp.isAppend());
106 PatternLayoutEncoder encoder = (PatternLayoutEncoder) rollingApp.getEncoder();
107 app.setEncoderPattern(encoder.getPattern());
108 app.setFileName(rollingApp.getFile());
109 if (rollingApp.getRollingPolicy() instanceof FixedWindowRollingPolicy) {
110 FixedWindowRollingPolicy rollingPolicy = (FixedWindowRollingPolicy) rollingApp
112 app.setMaxIndex(rollingPolicy.getMaxIndex());
113 app.setMinIndex(rollingPolicy.getMinIndex());
114 app.setFileNamePattern(rollingPolicy.getFileNamePattern());
115 app.setRollingPolicyType("FixedWindowRollingPolicy");
116 } else if (rollingApp.getRollingPolicy() instanceof TimeBasedRollingPolicy<?>) {
117 TimeBasedRollingPolicy rollingPolicy = (TimeBasedRollingPolicy) rollingApp.getRollingPolicy();
118 app.setRollingPolicyType("TimeBasedRollingPolicy");
119 app.setFileNamePattern(rollingPolicy.getFileNamePattern());
120 app.setMaxHistory(rollingPolicy.getMaxHistory());
121 app.setCleanHistoryOnStart(rollingPolicy.isCleanHistoryOnStart());
123 SizeBasedTriggeringPolicy<ILoggingEvent> triggeringPolicy = (SizeBasedTriggeringPolicy<ILoggingEvent>) rollingApp
124 .getTriggeringPolicy();
125 app.setMaxFileSize(triggeringPolicy.getMaxFileSize());
126 app.setName(rollingApp.getName());
127 this.rollingDTOs.put(rollingApp.getName(), app);
128 } else if (appender instanceof ch.qos.logback.core.FileAppender<?>) {
129 FileAppenderTO app = new FileAppenderTO();
130 fileApp = (ch.qos.logback.core.FileAppender<ILoggingEvent>) appender;
131 app.setName(fileApp.getName());
132 app.setAppend(fileApp.isAppend());
133 app.setFileName(fileApp.getFile());
134 PatternLayoutEncoder encoder = (PatternLayoutEncoder) fileApp.getEncoder();
135 app.setEncoderPattern(encoder.getPattern());
136 this.fileDTOs.put(fileApp.getName(), app);
138 if (appender instanceof ch.qos.logback.core.ConsoleAppender<?>) {
139 ConsoleAppenderTO app = new ConsoleAppenderTO();
140 consoleApp = (ch.qos.logback.core.ConsoleAppender<ILoggingEvent>) appender;
141 consoleApp.getCopyOfAttachedFiltersList();
142 PatternLayoutEncoder encoder = (PatternLayoutEncoder) consoleApp.getEncoder();
143 app.setEncoderPattern(encoder.getPattern());
144 app.setName(consoleApp.getName());
145 app.setThresholdFilter(context.getLogger(Logger.ROOT_LOGGER_NAME).getEffectiveLevel().levelStr);
146 this.consoleDTOs.put(consoleApp.getName(), app);
152 private Map<String, LoggerTO> prepareLoggersDTOs(LoggerContext context) {
153 Map<String, LoggerTO> DTOs = new HashMap<>();
154 List<String> appenders = new ArrayList<>();
155 List<org.slf4j.Logger> loggersToBeAdd = removeUnusableLoggers(context.getLoggerList(),
156 context.getLogger(Logger.ROOT_LOGGER_NAME));
157 for (org.slf4j.Logger log : loggersToBeAdd) {
158 LoggerTO logger = new LoggerTO();
159 if (((Logger) log).getLevel() != null)
160 logger.setLevel(((Logger) log).getLevel().levelStr);
162 logger.setLevel(((Logger) log).getEffectiveLevel().levelStr);
163 logger.setLoggerName(log.getName());
164 Iterator<Appender<ILoggingEvent>> iter = ((Logger) log).iteratorForAppenders();
165 while (iter.hasNext()) {
166 Appender<ILoggingEvent> element = iter.next();
167 appenders.add(element.getName());
169 logger.setAppenders(appenders);
170 DTOs.put(log.getName(), logger);
171 appenders = new ArrayList<>();
177 private List<org.slf4j.Logger> removeUnusableLoggers(List<Logger> loggerList, Logger rootLogger) {
178 Collections.sort(loggerList, new LoggerComparator());
179 Map<String, org.slf4j.Logger> loggersToReturn = new HashMap<>();
181 for (org.slf4j.Logger log : loggerList) {
182 boolean shouldAdd = true;
183 for (Entry<String, org.slf4j.Logger> entry : loggersToReturn.entrySet()) {
184 if (StringUtils.contains(log.getName(), entry.getKey())) {
185 if (((Logger) log).getLevel() != null
186 && ((Logger) log).getLevel().equals(((Logger) entry.getValue()).getLevel())
187 && !((Logger) log).iteratorForAppenders().hasNext()) {
191 if (((Logger) log).getLevel() == null
192 && ((Logger) log).getEffectiveLevel().equals(
193 ((Logger) entry.getValue()).getEffectiveLevel())
194 && !((Logger) log).iteratorForAppenders().hasNext()) {
199 if (((Logger) log).getLevel() != null && ((Logger) log).getLevel().equals(rootLogger.getLevel())
200 && !((Logger) log).iteratorForAppenders().hasNext()) {
204 if (((Logger) log).getLevel() == null
205 && ((Logger) log).getEffectiveLevel().equals(rootLogger.getEffectiveLevel())
206 && !((Logger) log).iteratorForAppenders().hasNext()) {
212 loggersToReturn.put(log.getName(), log);
215 return Lists.newArrayList(loggersToReturn.values());