2 * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.controller.config.yang.logback.config;
10 import static org.junit.Assert.assertEquals;
13 import java.io.IOException;
14 import java.lang.management.ManagementFactory;
15 import java.util.ArrayList;
16 import java.util.Arrays;
17 import java.util.List;
19 import javax.management.InstanceAlreadyExistsException;
20 import javax.management.JMX;
21 import javax.management.ObjectName;
23 import org.apache.commons.io.FileUtils;
24 import org.junit.Before;
25 import org.junit.Test;
26 import org.opendaylight.controller.config.api.jmx.ObjectNameUtil;
27 import org.opendaylight.controller.config.manager.impl.AbstractConfigTest;
28 import org.opendaylight.controller.config.manager.impl.factoriesresolver.HardcodedModuleFactoriesResolver;
29 import org.opendaylight.controller.config.util.ConfigTransactionClient;
30 import org.opendaylight.controller.config.util.ConfigTransactionJMXClient;
31 import org.slf4j.LoggerFactory;
33 import ch.qos.logback.classic.LoggerContext;
34 import ch.qos.logback.classic.encoder.PatternLayoutEncoder;
35 import ch.qos.logback.classic.joran.JoranConfigurator;
36 import ch.qos.logback.classic.spi.ILoggingEvent;
37 import ch.qos.logback.core.joran.spi.JoranException;
38 import ch.qos.logback.core.rolling.FixedWindowRollingPolicy;
39 import ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy;
41 import com.google.common.collect.Lists;
43 public class LogbackModuleWithInitialConfigurationTest extends
46 private LogbackModuleFactory factory;
49 public void setUp() throws IOException, ClassNotFoundException {
51 factory = new LogbackModuleFactory();
52 super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(
57 * Tests that initial configuration was changed. Changed attributes:
58 * location, fileName, duplicateInsertTries
62 public void test() throws Exception {
66 ConfigTransactionClient transaction = configRegistryClient
69 LogbackModuleMXBean bean = JMX.newMXBeanProxy(
70 ManagementFactory.getPlatformMBeanServer(),
71 transaction.lookupConfigBean("logback", "singleton"),
72 LogbackModuleMXBean.class);
73 assertEquals(1, bean.getConsoleAppenderTO().size());
74 assertEquals(1, bean.getRollingFileAppenderTO().size());
75 assertEquals(1, bean.getLoggerTO().size());
77 RollingFileAppenderTO rolling = new RollingFileAppenderTO();
78 RollingFileAppenderTO old = bean
79 .getRollingFileAppenderTO().get(0);
80 rolling.setAppend(old.getAppend());
81 rolling.setEncoderPattern(old.getEncoderPattern());
82 rolling.setFileName("target/logFile1.log");
83 rolling.setFileNamePattern("target/%i.log");
84 rolling.setMaxFileSize(old.getMaxFileSize());
85 rolling.setMinIndex(old.getMinIndex());
86 rolling.setMaxIndex(old.getMaxIndex());
87 rolling.setName("FILE");
89 ConsoleAppenderTO console = new ConsoleAppenderTO();
90 console.setEncoderPattern("%date %level [%thread] %logger{10} %msg%n");
91 console.setName("SYSTEM");
92 console.setThresholdFilter("DEBUG");
94 bean.setConsoleAppenderTO(Lists.newArrayList(console));
95 bean.setRollingFileAppenderTO(Lists.newArrayList(rolling));
97 LoggerTO logger = new LoggerTO();
98 logger.setLevel("INFO");
99 logger.setLoggerName("logger");
100 logger.setAppenders(Lists.newArrayList("SYSTEM"));
101 List<LoggerTO> loggers = Lists
102 .newArrayList(logger);
103 bean.setLoggerTO(loggers);
105 transaction.commit();
107 LogbackModuleMXBean logback = configRegistryClient.newMXBeanProxy(
108 ObjectNameUtil.createReadOnlyModuleON("logback", "singleton"),
109 LogbackModuleMXBean.class);
112 List<RollingFileAppenderTO> rollingList = logback
113 .getRollingFileAppenderTO();
114 assertEquals(1, rollingList.size());
116 RollingFileAppenderTO rollingApp = rollingList
118 assertEquals(rollingApp.getFileName(), "target/logFile1.log");
119 assertEquals(rollingApp.getName(), "FILE");
121 List<ConsoleAppenderTO> consoleList = logback
122 .getConsoleAppenderTO();
123 assertEquals(1, consoleList.size());
125 ConsoleAppenderTO consoleApp = consoleList
127 assertEquals(consoleApp.getThresholdFilter(), "DEBUG");
128 assertEquals(consoleApp.getName(), "SYSTEM");
130 loggers = logback.getLoggerTO();
131 assertEquals(1, loggers.size());
135 public ObjectName createBeans() throws JoranException,
136 InstanceAlreadyExistsException, IOException {
138 LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
140 JoranConfigurator configurator = new JoranConfigurator();
141 configurator.setContext(lc);
143 .doConfigure("src/test/resources/simple_config_logback.xml");
144 File f = new File("target/it");
146 FileUtils.cleanDirectory(f);
147 ch.qos.logback.classic.Logger logger = lc.getLogger(ch.qos.logback.classic.Logger.ROOT_LOGGER_NAME);
148 ch.qos.logback.core.rolling.RollingFileAppender<ILoggingEvent> fileAppender = (ch.qos.logback.core.rolling.RollingFileAppender<ILoggingEvent>) logger
149 .getAppender("VARLOGFILE");
150 fileAppender.start();
152 ch.qos.logback.core.ConsoleAppender<ILoggingEvent> consoleAppender = (ch.qos.logback.core.ConsoleAppender<ILoggingEvent>) logger
153 .getAppender("STDOUT");
154 consoleAppender.start();
155 List<RollingFileAppenderTO> rollingAppenders = new ArrayList<>();
156 RollingFileAppenderTO rollingApp = new RollingFileAppenderTO();
157 rollingApp.setAppend(fileAppender.isAppend());
158 PatternLayoutEncoder enc = (PatternLayoutEncoder) fileAppender
160 rollingApp.setEncoderPattern(enc.getPattern());
161 rollingApp.setFileName(fileAppender.getFile());
162 FixedWindowRollingPolicy rollingPolicy = (FixedWindowRollingPolicy) fileAppender
164 rollingApp.setMaxIndex(rollingPolicy.getMaxIndex());
165 rollingApp.setMinIndex(rollingPolicy.getMinIndex());
166 SizeBasedTriggeringPolicy<ILoggingEvent> triggeringPolicy = (SizeBasedTriggeringPolicy<ILoggingEvent>) fileAppender
167 .getTriggeringPolicy();
168 rollingApp.setMaxFileSize(triggeringPolicy.getMaxFileSize());
169 rollingApp.setName(fileAppender.getName());
170 rollingApp.setFileNamePattern(rollingPolicy.getFileNamePattern());
171 rollingAppenders.add(rollingApp);
173 assertEquals(rollingApp.getFileName(), "target/osgi.log");
174 assertEquals(rollingApp.getMaxFileSize(), "50MB");
175 assertEquals(rollingApp.getName(), "VARLOGFILE");
177 List<ConsoleAppenderTO> consoleAppenders = new ArrayList<>();
178 ConsoleAppenderTO consoleApp = new ConsoleAppenderTO();
179 enc = (PatternLayoutEncoder) consoleAppender.getEncoder();
180 consoleApp.setEncoderPattern(enc.getPattern());
181 consoleApp.setName(consoleAppender.getName());
182 consoleApp.setThresholdFilter("ALL");
183 consoleAppenders.add(consoleApp);
185 List<LoggerTO> loggersDTOs = new ArrayList<>();
186 LoggerTO log = new LoggerTO();
187 log.setAppenders(Arrays.asList(fileAppender.getName(),
188 consoleApp.getName()));
190 log.setLevel(logger.getLevel().toString());
191 log.setLoggerName(logger.getName());
192 loggersDTOs.add(log);
194 ConfigTransactionJMXClient transaction = configRegistryClient
195 .createTransaction();
196 ObjectName nameCreated = transaction.createModule(
197 factory.getImplementationName(), "singleton");
198 LogbackModuleMXBean bean = transaction.newMXBeanProxy(nameCreated,
199 LogbackModuleMXBean.class);
201 bean.setLoggerTO(loggersDTOs);
202 bean.setRollingFileAppenderTO(rollingAppenders);
203 bean.setConsoleAppenderTO(consoleAppenders);
205 transaction.commit();