X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fconfig%2Flogback-config%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fconfig%2Fyang%2Flogback%2Fconfig%2FContextSetterImpl.java;h=fa8c7f19ed939f3689ff8ba8570617f88ae50b6f;hb=refs%2Fchanges%2F22%2F2222%2F2;hp=7e4095ff9ca1ef1a8badfd9d3334aa9a1ee870e7;hpb=545b424ba9278d7aee12b9a6173e23c1b1d39dd3;p=controller.git diff --git a/opendaylight/config/logback-config/src/main/java/org/opendaylight/controller/config/yang/logback/config/ContextSetterImpl.java b/opendaylight/config/logback-config/src/main/java/org/opendaylight/controller/config/yang/logback/config/ContextSetterImpl.java index 7e4095ff9c..fa8c7f19ed 100644 --- a/opendaylight/config/logback-config/src/main/java/org/opendaylight/controller/config/yang/logback/config/ContextSetterImpl.java +++ b/opendaylight/config/logback-config/src/main/java/org/opendaylight/controller/config/yang/logback/config/ContextSetterImpl.java @@ -23,6 +23,7 @@ import ch.qos.logback.classic.spi.ILoggingEvent; import ch.qos.logback.core.Appender; import ch.qos.logback.core.rolling.FixedWindowRollingPolicy; import ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy; +import ch.qos.logback.core.rolling.TimeBasedRollingPolicy; import com.google.common.base.Optional; import com.google.common.base.Preconditions; @@ -35,32 +36,25 @@ import com.google.common.collect.Sets; public class ContextSetterImpl implements ContextSetter, Closeable { private final LogbackStatusListener statusListener; - private static final org.slf4j.Logger classLogger = LoggerFactory - .getLogger(ContextSetterImpl.class); + private static final org.slf4j.Logger classLogger = LoggerFactory.getLogger(ContextSetterImpl.class); - public ContextSetterImpl( - LogbackRuntimeRegistrator rootRuntimeBeanRegistratorWrapper) { - statusListener = new LogbackStatusListener( - rootRuntimeBeanRegistratorWrapper); + public ContextSetterImpl(LogbackRuntimeRegistrator rootRuntimeBeanRegistratorWrapper) { + statusListener = new LogbackStatusListener(rootRuntimeBeanRegistratorWrapper); statusListener.register(); } public void updateContext(LogbackModule module) { - LoggerContext context = (LoggerContext) LoggerFactory - .getILoggerFactory(); + LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory(); - List loggersBefore = context - .getLoggerList(); + List loggersBefore = context.getLoggerList(); createLoggers(context, module, Sets.newHashSet(loggersBefore)); } - private Map> createConsoleAppenders( - LoggerContext context, LogbackModule module) { + private Map> createConsoleAppenders(LoggerContext context, LogbackModule module) { Map> appendersMap = new HashMap<>(); for (ConsoleAppenderTO appender : module.getConsoleAppenderTO()) { - Preconditions.checkState( - appendersMap.containsKey(appender.getName()) == false, + Preconditions.checkState(appendersMap.containsKey(appender.getName()) == false, "Duplicate appender name %s", appender.getName()); ch.qos.logback.core.ConsoleAppender app = new ch.qos.logback.core.ConsoleAppender(); app.setContext(context); @@ -84,70 +78,53 @@ public class ContextSetterImpl implements ContextSetter, Closeable { private void createLoggers(LoggerContext context, LogbackModule module, Set loggersBefore) { - Map> appendersMap = getAppenders( - module, context); + Map> appendersMap = getAppenders(module, context); for (LoggerTO logger : module.getLoggerTO()) { - classLogger.trace("Setting configuration for logger {}", - logger.getLoggerName()); - final ch.qos.logback.classic.Logger logbackLogger = context - .getLogger(logger.getLoggerName()); - - Optional>> appendersBefore = getAppendersBefore( - loggersBefore, logbackLogger); - classLogger.trace("Logger {}: Appenders registered before: {}", - logger.getLoggerName(), - appendersBefore.isPresent() ? appendersBefore.get() - : "NO APPENDERS BEFORE"); + classLogger.trace("Setting configuration for logger {}", logger.getLoggerName()); + final ch.qos.logback.classic.Logger logbackLogger = context.getLogger(logger.getLoggerName()); + + Optional>> appendersBefore = getAppendersBefore(loggersBefore, logbackLogger); + classLogger.trace("Logger {}: Appenders registered before: {}", logger.getLoggerName(), + appendersBefore.isPresent() ? appendersBefore.get() : "NO APPENDERS BEFORE"); logbackLogger.setLevel(Level.toLevel(logger.getLevel())); - addNewAppenders(appendersMap, logger, logbackLogger, - appendersBefore); - removeBeforeAppenders(loggersBefore, logger, logbackLogger, - appendersBefore); + addNewAppenders(appendersMap, logger, logbackLogger, appendersBefore); + removeBeforeAppenders(loggersBefore, logger, logbackLogger, appendersBefore); } } - private void addNewAppenders( - Map> appendersMap, LoggerTO logger, - ch.qos.logback.classic.Logger logbackLogger, - Optional>> appendersBefore) { + private void addNewAppenders(Map> appendersMap, LoggerTO logger, + ch.qos.logback.classic.Logger logbackLogger, Optional>> appendersBefore) { for (String appenderName : logger.getAppenders()) { if (appendersMap.containsKey(appenderName)) { logbackLogger.addAppender(appendersMap.get(appenderName)); - classLogger.trace("Logger {}: Adding new appender: {}", - logger.getLoggerName(), appenderName); + classLogger.trace("Logger {}: Adding new appender: {}", logger.getLoggerName(), appenderName); } else { - throw new IllegalStateException( - "No appender " - + appenderName - + " found. This error should have been discovered by validation"); + throw new IllegalStateException("No appender " + appenderName + + " found. This error should have been discovered by validation"); } } } - private void removeBeforeAppenders( - Set loggersBefore, LoggerTO logger, - ch.qos.logback.classic.Logger logbackLogger, - Optional>> appendersBefore) { + private void removeBeforeAppenders(Set loggersBefore, LoggerTO logger, + ch.qos.logback.classic.Logger logbackLogger, Optional>> appendersBefore) { if (appendersBefore.isPresent()) { for (Appender appenderBefore : appendersBefore.get()) { logbackLogger.detachAppender(appenderBefore); appenderBefore.stop(); - classLogger.trace("Logger {}: Removing old appender: {}", - logger.getLoggerName(), appenderBefore.getName()); + classLogger.trace("Logger {}: Removing old appender: {}", logger.getLoggerName(), + appenderBefore.getName()); } loggersBefore.remove(logbackLogger); } } - private Optional>> getAppendersBefore( - Set loggersBefore, + private Optional>> getAppendersBefore(Set loggersBefore, ch.qos.logback.classic.Logger logbackLogger) { if (loggersBefore.contains(logbackLogger)) { - Iterator> appenderIt = logbackLogger - .iteratorForAppenders(); + Iterator> appenderIt = logbackLogger.iteratorForAppenders(); Set> appendersBefore = Sets.newHashSet(); while (appenderIt.hasNext()) { appendersBefore.add(appenderIt.next()); @@ -158,32 +135,50 @@ public class ContextSetterImpl implements ContextSetter, Closeable { } - private Map> getAppenders( - LogbackModule module, LoggerContext context) { + private Map> getAppenders(LogbackModule module, LoggerContext context) { Map> appendersMap = new HashMap<>(); addAllAppenders(appendersMap, createRollingAppenders(context, module)); + addAllAppenders(appendersMap, createFileAppenders(context, module)); addAllAppenders(appendersMap, createConsoleAppenders(context, module)); return appendersMap; } - private void addAllAppenders( - Map> allAppenders, + private void addAllAppenders(Map> allAppenders, Map> appendersToAdd) { for (String appenderName : appendersToAdd.keySet()) { - Preconditions.checkState( - allAppenders.containsKey(appenderName) == false, - "Duplicate appender name %s", appenderName); + Preconditions.checkState(allAppenders.containsKey(appenderName) == false, "Duplicate appender name %s", + appenderName); allAppenders.put(appenderName, appendersToAdd.get(appenderName)); } } - private Map> createRollingAppenders( - LoggerContext context, LogbackModule module) { + private Map> createFileAppenders(LoggerContext context, LogbackModule module) { + Map> appendersMap = new HashMap<>(); + for (FileAppenderTO appender : module.getFileAppenderTO()) { + Preconditions.checkState(appendersMap.containsKey(appender.getName()) == false, + "Duplicate appender name %s", appender.getName()); + ch.qos.logback.core.FileAppender app = new ch.qos.logback.core.FileAppender<>(); + app.setAppend(appender.getAppend()); + app.setContext(context); + PatternLayoutEncoder encoder = new PatternLayoutEncoder(); + encoder.setContext(context); + encoder.setPattern(appender.getEncoderPattern()); + encoder.start(); + app.setEncoder(encoder); + app.setFile(appender.getFileName()); + app.setName(appender.getName()); + app.start(); + appendersMap.put(app.getName(), app); + } + + return appendersMap; + } + + private Map> createRollingAppenders(LoggerContext context, LogbackModule module) { Map> appendersMap = new HashMap<>(); for (RollingFileAppenderTO appender : module.getRollingFileAppenderTO()) { - Preconditions.checkState( - appendersMap.containsKey(appender.getName()) == false, + Preconditions.checkState(appendersMap.containsKey(appender.getName()) == false, "Duplicate appender name %s", appender.getName()); ch.qos.logback.core.rolling.RollingFileAppender app = new ch.qos.logback.core.rolling.RollingFileAppender<>(); app.setAppend(appender.getAppend()); @@ -194,14 +189,27 @@ public class ContextSetterImpl implements ContextSetter, Closeable { encoder.start(); app.setEncoder(encoder); app.setFile(appender.getFileName()); - FixedWindowRollingPolicy policy = new FixedWindowRollingPolicy(); - policy.setContext(context); - policy.setMaxIndex(appender.getMaxIndex()); - policy.setMinIndex(appender.getMinIndex()); - policy.setFileNamePattern(appender.getFileNamePattern()); - policy.setParent(app); - policy.start(); - app.setRollingPolicy(policy); + if (appender.getRollingPolicyType().equals("FixedWindowRollingPolicy")) { + FixedWindowRollingPolicy policy = new FixedWindowRollingPolicy(); + policy.setContext(context); + policy.setMaxIndex(appender.getMaxIndex()); + policy.setMinIndex(appender.getMinIndex()); + policy.setFileNamePattern(appender.getFileNamePattern()); + policy.setParent(app); + policy.start(); + app.setRollingPolicy(policy); + } else if (appender.getRollingPolicyType().equals("TimeBasedRollingPolicy")) { + TimeBasedRollingPolicy policy = new TimeBasedRollingPolicy(); + policy.setContext(context); + policy.setMaxHistory(appender.getMaxHistory()); + if (appender.getCleanHistoryOnStart() != null) { + policy.setCleanHistoryOnStart(appender.getCleanHistoryOnStart()); + } + policy.setFileNamePattern(appender.getFileNamePattern()); + policy.setParent(app); + policy.start(); + app.setRollingPolicy(policy); + } SizeBasedTriggeringPolicy triggeringPolicy = new SizeBasedTriggeringPolicy(); triggeringPolicy.setContext(context); triggeringPolicy.setMaxFileSize(appender.getMaxFileSize());