
The branch, master has been updated via 4ad3aac72a198ac6e18862bcb0cf305d89f8247a (commit) from 6bf6cb246a697364bdeef756663f42593ed4b290 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- http://git.qos.ch/gitweb/?p=logback.git;a=commit;h=4ad3aac72a198ac6e18862bcb... http://github.com/ceki/logback/commit/4ad3aac72a198ac6e18862bcb0cf305d89f824... commit 4ad3aac72a198ac6e18862bcb0cf305d89f8247a Author: Ceki Gulcu <ceki@qos.ch> Date: Thu Dec 3 20:21:26 2009 +0100 - added OSGi related tests, similar to the one's done in slf4j/integrator module diff --git a/logback-classic/.gitignore b/logback-classic/.gitignore new file mode 100644 index 0000000..00cf4f4 --- /dev/null +++ b/logback-classic/.gitignore @@ -0,0 +1,3 @@ +bundle/ +lib/ +felix-cache/ \ No newline at end of file diff --git a/logback-classic/osgi-build.xml b/logback-classic/osgi-build.xml new file mode 100644 index 0000000..0d0e898 --- /dev/null +++ b/logback-classic/osgi-build.xml @@ -0,0 +1,84 @@ +<project name="osgi-test" default="testAll"> + + <!-- + This build file is usually run indirectly via Maven. + + When running this build file through Ant directly, you must + define the currentVersion property on the command line, e.g.: + + ant -DcurrentVersion=1.5.4-SNAPSHOT + --> + + <echo message="compile classpath: ${currentVersion}" /> + <echo message="test classpath: ${test_classpath}" /> + <echo message="basedir: ${basedir}" /> + + <property name="iBundleJar" value="target/iBundle.jar"/> + <property name="bundlesDir" value="bundle"/> + + + <!-- this is really very ugly, but it's the only way to circumvent + http://jira.codehaus.org/browse/MANTRUN-95 + --> + <taskdef name="junit" classpath="${test_classpath}" + classname="org.apache.tools.ant.taskdefs.optional.junit.JUnitTask" /> + + <path id="minimal"> + <pathelement location="target/test-classes/" /> + </path > + + <target name="copySLF4J_JAR"> + <echo>Copying ${slf4jJAR} to lib/</echo> + <delete> + <fileset dir="../logback-examples/lib/" includes="slf4j-*SNAPSHOT.jar" /> + </delete> + <copy file="${slf4jJAR}" todir="lib/" /> + </target> + + <target name="init" depends="copySLF4J_JAR"> + <mkdir dir="target/unit-reports" /> + </target> + + <target name="createIBundle"> + <mkdir dir="${bundlesDir}"/> + <jar destFile="${iBundleJar}" + manifest="src/IBUNDLE-META-INF/MANIFEST.MF" + basedir="target/test-classes/" + includes="integrator/**.class"/> + + </target> + + <target name="testAll" depends="init, createIBundle, logback"> + </target> + + + <macrodef name="prepareOSGiHarness"> + <attribute name="binding"/> + <sequential> + <delete> + <fileset dir="${bundlesDir}" includes="*.jar"/> + </delete> + <copy file="${iBundleJar}" todir="${bundlesDir}"/> + <copy file="../logback-examples/lib/slf4j-api-${slf4j.version}.jar" todir="${bundlesDir}"/> + <copy file="../logback-core/target/logback-core-${currentVersion}.jar" todir="${bundlesDir}"/> + <copy file="target/logback-classic-${currentVersion}.jar" todir="${bundlesDir}"/> + <echo>value of t = @{t}</echo> + </sequential> + </macrodef> + + + <!-- for some reason if mvn is invoked from the parent directory, junit gets + invoked from the parent dir, which messes up theses tests. Hence, the + fork="yes" dir="${basedir}" --> + + + <target name="logback"> + <prepareOSGiHarness binding="logback"/> + <junit printsummary="yes" fork="yes" dir="${basedir}" haltonfailure="yes"> + <classpath path="${test_classpath}"/> + <formatter type="plain" /> + <test fork="yes" todir="target/unit-reports" name="org.slf4j.test_osgi.BundleTest" /> + </junit> + </target> + +</project> \ No newline at end of file diff --git a/logback-classic/pom.xml b/logback-classic/pom.xml index c6a1a89..e1340cb 100644 --- a/logback-classic/pom.xml +++ b/logback-classic/pom.xml @@ -101,6 +101,13 @@ <type>test-jar</type> <scope>test</scope> </dependency> + + <dependency> + <groupId>org.slf4j</groupId> + <artifactId>integration</artifactId> + <version>${slf4j.version}</version> + <scope>test</scope> + </dependency> <dependency> <groupId>org.apache.geronimo.specs</groupId> @@ -142,6 +149,13 @@ <version>1.6</version> <scope>test</scope> </dependency> + + <dependency> + <groupId>org.apache.felix</groupId> + <artifactId>org.apache.felix.main</artifactId> + <version>2.0.2</version> + <scope>test</scope> + </dependency> </dependencies> <build> @@ -178,6 +192,45 @@ </executions> </plugin> + + <plugin> + <artifactId>maven-antrun-plugin</artifactId> + <version>1.2</version> + <dependencies> + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <version>3.8.1</version> + </dependency> + <dependency> + <groupId>ant</groupId> + <artifactId>ant-junit</artifactId> + <version>1.6.5</version> + </dependency> + </dependencies> + <executions> + <execution> + <id>ant-osgi-test</id> + <phase>package</phase> + <configuration> + <tasks> + <property name="currentVersion" value="${version}" /> + <property name="slf4j.version" value="${slf4j.version}"/> + <property name="test_classpath" refid="maven.test.classpath"/> + <property name="slf4jJAR" + value="${settings.localRepository}/org/slf4j/slf4j-api/${slf4j.version}/slf4j-api-${slf4j.version}.jar" /> + <property name="basedir" value="${basedir}"/> + <ant antfile="${basedir}/osgi-build.xml"/> + </tasks> + </configuration> + <goals> + <goal>run</goal> + </goals> + </execution> + + </executions> + </plugin> + <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> @@ -189,6 +242,8 @@ <exclude>**/AllClassicTest.java</exclude> <exclude>**/PackageTest.java</exclude> <exclude>**/TestConstants.java</exclude> + <exclude>**/test_osgi/BundleTest.java</exclude> +org.slf4j.test_osgi <exclude>**/SerializationPerfsTest.java</exclude> </excludes> </configuration> diff --git a/logback-classic/src/IBUNDLE-META-INF/MANIFEST.MF b/logback-classic/src/IBUNDLE-META-INF/MANIFEST.MF new file mode 100644 index 0000000..fe56e16 --- /dev/null +++ b/logback-classic/src/IBUNDLE-META-INF/MANIFEST.MF @@ -0,0 +1,15 @@ +Manifest-Version: 1.0 +Archiver-Version: Plexus Archiver +Created-By: Apache Maven +Built-By: ceki +Build-Jdk: 1.6.0_16 +Bundle-Description: iBundle +Bundle-Version: 0.1 +Bundle-Activator: integrator.Activator +Implementation-Title: iBundle +Bundle-ManifestVersion: 2 +Bundle-SymbolicName: iBundle +Bundle-Name: abundle +Bundle-RequiredExecutionEnvironment: J2SE-1.3 +Export-Package: apack +Import-Package: org.osgi.framework, org.slf4j;version=1.5, ch.qos.logback.core, ch.qos.logback.core.joran.spi, ch.qos.logback.core.util, ch.qos.logback.classic, ch.qos.logback.classic.joran diff --git a/logback-classic/src/test/input/osgi/simple.xml b/logback-classic/src/test/input/osgi/simple.xml new file mode 100644 index 0000000..57800e2 --- /dev/null +++ b/logback-classic/src/test/input/osgi/simple.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!DOCTYPE configuration> + +<configuration debug="false"> + + <appender name="LIST" class="ch.qos.logback.core.FileAppender"> + <file>target/test-output/osgi-test.log</file> + <layout> + <pattern>%d %level - %m%n</pattern> + </layout> + </appender> + + <logger name="ch.qos.logback.classic.joran" level="INFO" /> + + <root level="DEBUG"> + <appender-ref ref="LIST" /> + </root> + +</configuration> diff --git a/logback-classic/src/test/java/integrator/Activator.java b/logback-classic/src/test/java/integrator/Activator.java new file mode 100644 index 0000000..7c3b08e --- /dev/null +++ b/logback-classic/src/test/java/integrator/Activator.java @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2004-2009 QOS.ch All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package integrator; + +import org.osgi.framework.Bundle; +import org.osgi.framework.BundleActivator; +import org.osgi.framework.BundleContext; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import ch.qos.logback.classic.LoggerContext; +import ch.qos.logback.classic.joran.JoranConfigurator; +import ch.qos.logback.core.joran.spi.JoranException; +import ch.qos.logback.core.util.StatusPrinter; + +/** + * A BundleActivator which invokes slf4j loggers + * @author Ceki Gülcü + * + */ +public class Activator implements BundleActivator { + + private BundleContext m_context = null; + + public void start(BundleContext context) { + LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory(); + + try { + JoranConfigurator configurator = new JoranConfigurator(); + configurator.setContext(lc); + // the context was probably already configured by default configuration + // rules + lc.reset(); + configurator.doConfigure("src/test/input/osgi/simple.xml"); + } catch (JoranException je) { + je.printStackTrace(); + } + StatusPrinter.printInCaseOfErrorsOrWarnings(lc); + + + Logger logger = LoggerFactory.getLogger(this.getClass()); + logger.info("Activator.start()"); + m_context = context; + } + + public void stop(BundleContext context) { + m_context = null; + Logger logger = LoggerFactory.getLogger(this.getClass()); + logger.info("Activator.stop"); + } + + public Bundle[] getBundles() { + if (m_context != null) { + return m_context.getBundles(); + } + return null; + } +} \ No newline at end of file diff --git a/logback-classic/src/test/java/org/slf4j/test_osgi/BundleTest.java b/logback-classic/src/test/java/org/slf4j/test_osgi/BundleTest.java new file mode 100644 index 0000000..c4f209f --- /dev/null +++ b/logback-classic/src/test/java/org/slf4j/test_osgi/BundleTest.java @@ -0,0 +1,35 @@ +package org.slf4j.test_osgi; + +import java.io.File; + +import junit.framework.TestCase; + +public class BundleTest extends TestCase { + + FrameworkErrorListener fel = new FrameworkErrorListener(); + CheckingBundleListener mbl = new CheckingBundleListener(); + + FelixHost felixHost = new FelixHost(fel, mbl); + + protected void setUp() throws Exception { + super.setUp(); + felixHost.doLaunch(); + } + + protected void tearDown() throws Exception { + super.tearDown(); + felixHost.stop(); + } + + public void testSmoke() { + System.out.println("==========="+new File(".").getAbsolutePath()); + mbl.dumpAll(); + // check that the bundle was installed + assertTrue(mbl.exists("iBundle")); + if(fel.errorList.size() != 0) { + fel.dumpAll(); + } + // check that no errors occured + assertEquals(0, fel.errorList.size()); + } +} diff --git a/logback-classic/src/test/java/org/slf4j/test_osgi/CheckingBundleListener.java b/logback-classic/src/test/java/org/slf4j/test_osgi/CheckingBundleListener.java new file mode 100644 index 0000000..3641a2a --- /dev/null +++ b/logback-classic/src/test/java/org/slf4j/test_osgi/CheckingBundleListener.java @@ -0,0 +1,43 @@ +package org.slf4j.test_osgi; + +import java.util.ArrayList; +import java.util.List; + +import org.osgi.framework.Bundle; +import org.osgi.framework.BundleEvent; +import org.osgi.framework.BundleListener; + +public class CheckingBundleListener implements BundleListener { + + List eventList = new ArrayList(); + + public void bundleChanged(BundleEvent be) { + eventList.add(be); + } + + private void dump(BundleEvent be) { + System.out.println("BE:" + ", source " + be.getSource() + ", bundle=" + + be.getBundle() + ", type=" + be.getType()); + + } + + public void dumpAll() { + for (int i = 0; i < eventList.size(); i++) { + BundleEvent fe = (BundleEvent) eventList.get(i); + dump(fe); + } + } + + boolean exists(String bundleName) { + for (int i = 0; i < eventList.size(); i++) { + BundleEvent fe = (BundleEvent) eventList.get(i); + Bundle b = fe.getBundle(); + System.out.println("===["+b+"]"); + if (bundleName.equals(b.getSymbolicName())) { + return true; + } + } + return false; + } + +} diff --git a/logback-classic/src/test/java/org/slf4j/test_osgi/FelixHost.java b/logback-classic/src/test/java/org/slf4j/test_osgi/FelixHost.java new file mode 100644 index 0000000..62058f5 --- /dev/null +++ b/logback-classic/src/test/java/org/slf4j/test_osgi/FelixHost.java @@ -0,0 +1,126 @@ +/* + * Copyright (c) 2004-2009 QOS.ch All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package org.slf4j.test_osgi; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Properties; + +import org.apache.felix.framework.Felix; +import org.apache.felix.framework.util.FelixConstants; +import org.apache.felix.framework.util.StringMap; +import org.apache.felix.main.AutoProcessor; +import org.osgi.framework.Bundle; +import org.osgi.framework.BundleContext; +import org.osgi.framework.BundleException; +import org.osgi.framework.Constants; + +/** + * Runs a hosted version of Felix for testing purposes. Any bundle errors are + * reported via the FrameworkListener passed to the constructor. + * + * @author Ceki Gücü + */ +public class FelixHost { + + private Felix felix = null; + + Properties otherProps = new Properties(); + + final FrameworkErrorListener frameworkErrorListener; + final CheckingBundleListener myBundleListener; + + public FelixHost(FrameworkErrorListener frameworkErrorListener, + CheckingBundleListener myBundleListener) { + this.frameworkErrorListener = frameworkErrorListener; + this.myBundleListener = myBundleListener; + } + + public void doLaunch() { + // Create a case-insensitive configuration property map. + Map configMap = new StringMap(false); + // Configure the Felix instance to be embedded. + // configMap.put(FelixConstants.EMBEDDED_EXECUTION_PROP, "true"); + // Add core OSGi packages to be exported from the class path + // via the system bundle. + configMap.put(Constants.FRAMEWORK_SYSTEMPACKAGES, + "org.osgi.framework; version=1.3.0," + + "org.osgi.service.packageadmin; version=1.2.0," + + "org.osgi.service.startlevel; version=1.0.0," + + "org.osgi.service.url; version=1.0.0"); + + configMap.put(Constants.FRAMEWORK_STORAGE_CLEAN, + Constants.FRAMEWORK_STORAGE_CLEAN_ONFIRSTINIT); + + // Explicitly specify the directory to use for caching bundles. + // configMap.put(BundleCache.CACHE_PROFILE_DIR_PROP, "cache"); + + try { + // Create host activator; + + List list = new ArrayList(); + + // list.add(new HostActivator()); + configMap.put(Constants.FRAMEWORK_SYSTEMPACKAGES_EXTRA, + "org.xml.sax, org.xml.sax.helpers, javax.xml.parsers, javax.naming"); + configMap.put(FelixConstants.SYSTEMBUNDLE_ACTIVATORS_PROP, list); + configMap.put("felix.log.level", "4"); + + // Now create an instance of the framework with + // our configuration properties and activator. + felix = new Felix(configMap); + felix.init(); + + // otherProps.put(Constants.FRAMEWORK_STORAGE, "bundles"); + + otherProps.put(AutoProcessor.AUTO_DEPLOY_DIR_PROPERY, + AutoProcessor.AUTO_DEPLOY_DIR_VALUE); + otherProps.put(AutoProcessor.AUTO_DEPLOY_ACTION_PROPERY, + AutoProcessor.AUTO_DEPLOY_START_VALUE + "," + + AutoProcessor.AUTO_DEPLOY_INSTALL_VALUE); + + BundleContext felixBudleContext = felix.getBundleContext(); + + AutoProcessor.process(otherProps, felixBudleContext); + // listen to errors + felixBudleContext.addFrameworkListener(frameworkErrorListener); + felixBudleContext.addBundleListener(myBundleListener); + // Now start Felix instance. + felix.start(); + System.out.println("felix started"); + + } catch (Exception ex) { + ex.printStackTrace(); + } + } + + public void stop() throws BundleException { + felix.stop(); + } + + public Bundle[] getInstalledBundles() { + // Use the system bundle activator to gain external + // access to the set of installed bundles. + return null;// m_activator.getBundles(); + } +} \ No newline at end of file diff --git a/logback-classic/src/test/java/org/slf4j/test_osgi/FrameworkErrorListener.java b/logback-classic/src/test/java/org/slf4j/test_osgi/FrameworkErrorListener.java new file mode 100644 index 0000000..118ac8d --- /dev/null +++ b/logback-classic/src/test/java/org/slf4j/test_osgi/FrameworkErrorListener.java @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2004-2009 QOS.ch All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package org.slf4j.test_osgi; + +import java.util.ArrayList; +import java.util.List; + +import org.osgi.framework.FrameworkEvent; +import org.osgi.framework.FrameworkListener; + +public class FrameworkErrorListener implements FrameworkListener { + + public List errorList = new ArrayList(); + + public void frameworkEvent(FrameworkEvent fe) { + if (fe.getType() == FrameworkEvent.ERROR) { + errorList.add(fe); + + } + } + + private void dump(FrameworkEvent fe) { + Throwable t = fe.getThrowable(); + String tString = null; + if (t != null) { + tString = t.toString(); + } + System.out.println("Framework ERROR:" + ", source " + fe.getSource() + + ", bundle=" + fe.getBundle() + ", ex=" + tString); + if(t != null) { + t.printStackTrace(); + } + } + + public void dumpAll() { + for(int i = 0; i < errorList.size(); i++) { + FrameworkEvent fe = (FrameworkEvent) errorList.get(i); + dump(fe); + } + } +} diff --git a/logback-examples/lib/slf4j-api-1.5.10.jar b/logback-examples/lib/slf4j-api-1.5.10.jar new file mode 100644 index 0000000..9ec867b Binary files /dev/null and b/logback-examples/lib/slf4j-api-1.5.10.jar differ diff --git a/logback-examples/lib/slf4j-api-1.5.8.jar b/logback-examples/lib/slf4j-api-1.5.8.jar deleted file mode 100644 index 20d1d37..0000000 Binary files a/logback-examples/lib/slf4j-api-1.5.8.jar and /dev/null differ diff --git a/logback-site/src/site/pages/news.html b/logback-site/src/site/pages/news.html index ec8a6ab..d2b7056 100644 --- a/logback-site/src/site/pages/news.html +++ b/logback-site/src/site/pages/news.html @@ -28,7 +28,7 @@ <hr width="80%" align="center" /> - <h3>13th of November 2009 - Release of version 0.9.18</h3> + <h3>xx December 2009 - Release of version 0.9.18</h3> <p>After a very long investigation resulting in somewhat a better understanding of licensing issues, logback is now <a @@ -58,6 +58,9 @@ by Anders Wallgren. </p> + <p>Added tests cases which run logback artifacts as bundles within + Felix. This should solve a series of problems related to OSGi.</p> + <p>When ill-formed configuration files fragments were included in another configuration file, the included file was not closed correctly. This issue was reported in <a ----------------------------------------------------------------------- Summary of changes: logback-classic/.gitignore | 3 + logback-classic/osgi-build.xml | 84 +++++++++++++ logback-classic/pom.xml | 55 +++++++++ logback-classic/src/IBUNDLE-META-INF/MANIFEST.MF | 15 +++ .../{joran/simpleLevel.xml => osgi/simple.xml} | 9 +- .../src/test/java/integrator/Activator.java | 77 ++++++++++++ .../test/java/org/slf4j/test_osgi/BundleTest.java | 35 ++++++ .../slf4j/test_osgi/CheckingBundleListener.java | 43 +++++++ .../test/java/org/slf4j/test_osgi/FelixHost.java | 126 ++++++++++++++++++++ .../slf4j/test_osgi/FrameworkErrorListener.java | 60 +++++++++ logback-examples/lib/slf4j-api-1.5.10.jar | Bin 0 -> 23659 bytes logback-examples/lib/slf4j-api-1.5.8.jar | Bin 23445 -> 0 bytes logback-site/src/site/pages/news.html | 5 +- 13 files changed, 509 insertions(+), 3 deletions(-) create mode 100644 logback-classic/.gitignore create mode 100644 logback-classic/osgi-build.xml create mode 100644 logback-classic/src/IBUNDLE-META-INF/MANIFEST.MF copy logback-classic/src/test/input/{joran/simpleLevel.xml => osgi/simple.xml} (54%) create mode 100644 logback-classic/src/test/java/integrator/Activator.java create mode 100644 logback-classic/src/test/java/org/slf4j/test_osgi/BundleTest.java create mode 100644 logback-classic/src/test/java/org/slf4j/test_osgi/CheckingBundleListener.java create mode 100644 logback-classic/src/test/java/org/slf4j/test_osgi/FelixHost.java create mode 100644 logback-classic/src/test/java/org/slf4j/test_osgi/FrameworkErrorListener.java create mode 100644 logback-examples/lib/slf4j-api-1.5.10.jar delete mode 100644 logback-examples/lib/slf4j-api-1.5.8.jar hooks/post-receive -- Logback: the generic, reliable, fast and flexible logging framework.