svn commit: r1979 - in logback/trunk/logback-classic: . src/main/java/ch/qos/logback/classic/pattern src/main/java/ch/qos/logback/classic/selector/servlet src/main/java/org/slf4j/impl src/test src/test/java/ch/qos/logback/classic/net src/test/java/ch/qos/logback/classic/net/mock src/test/java/ch/qos/logback/classic/selector src/test/java/ch/qos/logback/classic/util src/test/java/org/dummy src/test/java/org/slf4j src/test/java/org/slf4j/impl src/test/resources

Author: ceki Date: Thu Nov 20 19:04:55 2008 New Revision: 1979 Added: logback/trunk/logback-classic/src/test/generateRollingLogsInSafeMode.sh logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/util/MockInitialContext.java - copied, changed from r1899, /logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/net/mock/MockInitialContext.java logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/util/MockInitialContextFactory.java - copied, changed from r1899, /logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/net/mock/MockInitialContextFactory.java logback/trunk/logback-classic/src/test/java/org/slf4j/LoggerFactoryFriend.java logback/trunk/logback-classic/src/test/java/org/slf4j/impl/StaticLoggerBinderFriend.java logback/trunk/logback-classic/src/test/resources/recursiveInit.xml Removed: logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/net/mock/MockInitialContext.java logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/net/mock/MockInitialContextFactory.java Modified: logback/trunk/logback-classic/pom.xml logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/pattern/RelativeTimeConverter.java logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/selector/servlet/ContextDetachingSCL.java logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/selector/servlet/LoggerContextFilter.java logback/trunk/logback-classic/src/main/java/org/slf4j/impl/StaticLoggerBinder.java logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/net/JMSQueueAppenderTest.java logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/net/JMSTopicAppenderTest.java logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/selector/ContextDetachingSCLTest.java logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/selector/ContextJNDISelectorTest.java logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/selector/PackageTest.java logback/trunk/logback-classic/src/test/java/org/dummy/DummyLBAppender.java logback/trunk/logback-classic/src/test/java/org/slf4j/impl/RecursiveInitializationTest.java Log: LBCLASSIC-87 With each call to getLogger() method, LoggerContext will now retrieve the ILoggerFactory afresh from StaticLoggerBinder. This change enables context selectors of native implementations, e.g logback, to work correctly. Modified: logback/trunk/logback-classic/pom.xml ============================================================================== --- logback/trunk/logback-classic/pom.xml (original) +++ logback/trunk/logback-classic/pom.xml Thu Nov 20 19:04:55 2008 @@ -47,6 +47,13 @@ <dependency> <groupId>org.slf4j</groupId> + <artifactId>slf4j-ext</artifactId> + <version>${slf4j.version}</version> + <scope>compile</scope> + </dependency> + + <dependency> + <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <type>test-jar</type> <version>${slf4j.version}</version> Modified: logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/pattern/RelativeTimeConverter.java ============================================================================== --- logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/pattern/RelativeTimeConverter.java (original) +++ logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/pattern/RelativeTimeConverter.java Thu Nov 20 19:04:55 2008 @@ -1,11 +1,11 @@ /** - * LOGBack: the reliable, fast and flexible logging library for Java. - * - * Copyright (C) 1999-2006, QOS.ch - * - * This library is free software, you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation. + * Logback: the generic, reliable, fast and flexible logging framework. + * + * Copyright (C) 2000-2008, QOS.ch + * + * This library is free software, you can redistribute it and/or modify it under + * the terms of the GNU Lesser General Public License as published by the Free + * Software Foundation. */ package ch.qos.logback.classic.pattern; Modified: logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/selector/servlet/ContextDetachingSCL.java ============================================================================== --- logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/selector/servlet/ContextDetachingSCL.java (original) +++ logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/selector/servlet/ContextDetachingSCL.java Thu Nov 20 19:04:55 2008 @@ -38,7 +38,7 @@ if (loggerContextName != null) { System.out.println("About to detach context named " + loggerContextName); - ContextSelector selector = StaticLoggerBinder.SINGLETON.getContextSelector(); + ContextSelector selector = StaticLoggerBinder.getSingleton().getContextSelector(); LoggerContext context = selector.detachLoggerContext(loggerContextName); if (context != null) { Logger logger = context.getLogger(LoggerContext.ROOT_NAME); Modified: logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/selector/servlet/LoggerContextFilter.java ============================================================================== --- logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/selector/servlet/LoggerContextFilter.java (original) +++ logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/selector/servlet/LoggerContextFilter.java Thu Nov 20 19:04:55 2008 @@ -57,7 +57,7 @@ FilterChain chain) throws IOException, ServletException { LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory(); - ContextSelector selector = StaticLoggerBinder.SINGLETON.getContextSelector(); + ContextSelector selector = StaticLoggerBinder.getSingleton().getContextSelector(); ContextJNDISelector sel = null; if (selector instanceof ContextJNDISelector) { Modified: logback/trunk/logback-classic/src/main/java/org/slf4j/impl/StaticLoggerBinder.java ============================================================================== --- logback/trunk/logback-classic/src/main/java/org/slf4j/impl/StaticLoggerBinder.java (original) +++ logback/trunk/logback-classic/src/main/java/org/slf4j/impl/StaticLoggerBinder.java Thu Nov 20 19:04:55 2008 @@ -38,46 +38,61 @@ */ public class StaticLoggerBinder implements LoggerFactoryBinder { - private ContextSelector contextSelector; + /** + * Declare the version of the SLF4J API this implementation is compiled + * against. The value of this field is usually modified with each release. + */ + // to avoid constant folding by the compiler, this field must *not* be final + public static String REQUESTED_API_VERSION = "1.5.6"; // !final final static String NULL_CS_URL = CoreConstants.CODES_URL + "#null_CS"; /** * The unique instance of this class. */ - public static final StaticLoggerBinder SINGLETON = new StaticLoggerBinder(); + private static StaticLoggerBinder SINGLETON = new StaticLoggerBinder(); - /** - * Declare the version of the SLF4J API this implementation is compiled against. - * The value of this field is usually modified with each release. - */ - // to avoid constant folding by the compiler, this field must *not* be final - public static String REQUESTED_API_VERSION = "1.5.5"; // !final - - private static final String loggerFactoryClassStr = ContextSelector.class - .getName(); + static { + SINGLETON.init(); + } + + private boolean initialized = false; + private LoggerContext defaultLoggerContext = new LoggerContext(); + private ContextSelector contextSelector; + private StaticLoggerBinder() { - initialize(); + defaultLoggerContext.setName("default"); } - public void initialize() { + public static StaticLoggerBinder getSingleton() { + return SINGLETON; + } + + /** + * Package access for testing purposes. + */ + static void reset() { + SINGLETON = new StaticLoggerBinder(); + SINGLETON.init(); + } + + /** + * Package access for testing purposes. + */ + void init() { try { - // let's configure a default context - LoggerContext defaultLoggerContext = new LoggerContext(); - defaultLoggerContext.setName("default"); try { new ContextInitializer(defaultLoggerContext).autoConfig(); } catch (JoranException je) { - // TODO test me Util.reportFailure("Failed to auto configure default logger context", je); } StatusPrinter.printIfErrorsOccured(defaultLoggerContext); // See if a special context selector is needed - String contextSelectorStr = OptionHelper.getSystemProperty( - ClassicGlobal.LOGBACK_CONTEXT_SELECTOR, null); + String contextSelectorStr = OptionHelper + .getSystemProperty(ClassicGlobal.LOGBACK_CONTEXT_SELECTOR); if (contextSelectorStr == null) { contextSelector = new DefaultContextSelector(defaultLoggerContext); } else if (contextSelectorStr.equals("JNDI")) { @@ -87,6 +102,7 @@ contextSelector = dynamicalContextSelector(defaultLoggerContext, contextSelectorStr); } + initialized = true; } catch (Throwable t) { // we should never get here Util.reportFailure("Failed to instantiate [" @@ -106,6 +122,10 @@ } public ILoggerFactory getLoggerFactory() { + if(!initialized) { + return defaultLoggerContext; + } + if (contextSelector == null) { throw new IllegalStateException( "contextSelector cannot be null. See also " + NULL_CS_URL); @@ -114,7 +134,7 @@ } public String getLoggerFactoryClassStr() { - return loggerFactoryClassStr; + return contextSelector.getClass().getName(); } /** Added: logback/trunk/logback-classic/src/test/generateRollingLogsInSafeMode.sh ============================================================================== --- (empty file) +++ logback/trunk/logback-classic/src/test/generateRollingLogsInSafeMode.sh Thu Nov 20 19:04:55 2008 @@ -0,0 +1,40 @@ +echo "File name $1" +echo "run length $2" + + + +#On windows +#CLASSPATH="${CLASSPATH};./target/classes/" +#CLASSPATH="${CLASSPATH};./target/test-classes/" +#CLASSPATH="${CLASSPATH};../logback-core/target/classes" +#CLASSPATH="${CLASSPATH};../logback-examples/lib/slf4j-api-1.5.5.jar" + +# On Unix +#CLASSPATH="${CLASSPATH}:./target/classes/" +#CLASSPATH="${CLASSPATH}:./target/test-classes/" +#CLASSPATH="${CLASSPATH}:../logback-core/target/classes" +#CLASSPATH="${CLASSPATH}:../logback-examples/lib/slf4j-api-1.5.5.jar" + + +if [ $# -lt 3 ] +then + echo "Usage: generateRollingLogsInSafeMode.sh filename runLen stamp0 ... stampN" + exit 1; +fi + +FILENAME=$1 +LEN=$2 + +shift 2 + +for stamp in $@ +do + echo running safe mode with $stamp + java ch.qos.logback.classic.multiJVM.SafeModeRollingFileAppender $stamp $LEN $FILENAME & +done + +wait + +echo "To test the results issue the following command" +echo "./checkResults.sh $FILENAME $LEN $*" + Modified: logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/net/JMSQueueAppenderTest.java ============================================================================== --- logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/net/JMSQueueAppenderTest.java (original) +++ logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/net/JMSQueueAppenderTest.java Thu Nov 20 19:04:55 2008 @@ -4,12 +4,12 @@ import junit.framework.TestCase; import ch.qos.logback.classic.Level; -import ch.qos.logback.classic.net.mock.MockInitialContext; -import ch.qos.logback.classic.net.mock.MockInitialContextFactory; import ch.qos.logback.classic.net.mock.MockQueue; import ch.qos.logback.classic.net.mock.MockQueueConnectionFactory; import ch.qos.logback.classic.net.mock.MockQueueSender; import ch.qos.logback.classic.spi.LoggingEvent; +import ch.qos.logback.classic.util.MockInitialContext; +import ch.qos.logback.classic.util.MockInitialContextFactory; import ch.qos.logback.core.ContextBase; public class JMSQueueAppenderTest extends TestCase { Modified: logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/net/JMSTopicAppenderTest.java ============================================================================== --- logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/net/JMSTopicAppenderTest.java (original) +++ logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/net/JMSTopicAppenderTest.java Thu Nov 20 19:04:55 2008 @@ -7,12 +7,12 @@ import junit.framework.TestCase; import ch.qos.logback.classic.Level; -import ch.qos.logback.classic.net.mock.MockInitialContext; -import ch.qos.logback.classic.net.mock.MockInitialContextFactory; import ch.qos.logback.classic.net.mock.MockTopic; import ch.qos.logback.classic.net.mock.MockTopicConnectionFactory; import ch.qos.logback.classic.net.mock.MockTopicPublisher; import ch.qos.logback.classic.spi.LoggingEvent; +import ch.qos.logback.classic.util.MockInitialContext; +import ch.qos.logback.classic.util.MockInitialContextFactory; import ch.qos.logback.core.ContextBase; public class JMSTopicAppenderTest extends TestCase { Modified: logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/selector/ContextDetachingSCLTest.java ============================================================================== --- logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/selector/ContextDetachingSCLTest.java (original) +++ logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/selector/ContextDetachingSCLTest.java Thu Nov 20 19:04:55 2008 @@ -6,9 +6,9 @@ import org.slf4j.impl.StaticLoggerBinder; import ch.qos.logback.classic.ClassicGlobal; -import ch.qos.logback.classic.net.mock.MockInitialContext; -import ch.qos.logback.classic.net.mock.MockInitialContextFactory; import ch.qos.logback.classic.selector.servlet.ContextDetachingSCL; +import ch.qos.logback.classic.util.MockInitialContext; +import ch.qos.logback.classic.util.MockInitialContextFactory; public class ContextDetachingSCLTest extends TestCase { @@ -43,7 +43,7 @@ } public void testDetach() { - ContextJNDISelector selector = (ContextJNDISelector) StaticLoggerBinder.SINGLETON.getContextSelector(); + ContextJNDISelector selector = (ContextJNDISelector) StaticLoggerBinder.getSingleton().getContextSelector(); listener.contextDestroyed(null); assertEquals(0, selector.getCount()); } @@ -51,14 +51,14 @@ public void testDetachWithMissingContext() { MockInitialContext mic = MockInitialContextFactory.getContext(); mic.map.put(ClassicGlobal.JNDI_CONTEXT_NAME, "tata"); - ContextJNDISelector selector = (ContextJNDISelector) StaticLoggerBinder.SINGLETON.getContextSelector(); + ContextJNDISelector selector = (ContextJNDISelector) StaticLoggerBinder.getSingleton().getContextSelector(); assertEquals("tata", selector.getLoggerContext().getName()); mic.map.put(ClassicGlobal.JNDI_CONTEXT_NAME, "titi"); assertEquals("titi", selector.getLoggerContext().getName()); listener.contextDestroyed(null); - assertEquals(1, selector.getCount()); + assertEquals(2, selector.getCount()); } } Modified: logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/selector/ContextJNDISelectorTest.java ============================================================================== --- logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/selector/ContextJNDISelectorTest.java (original) +++ logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/selector/ContextJNDISelectorTest.java Thu Nov 20 19:04:55 2008 @@ -1,25 +1,28 @@ package ch.qos.logback.classic.selector; -import junit.framework.TestCase; +import static org.junit.Assert.assertEquals; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; import org.slf4j.LoggerFactory; import org.slf4j.impl.StaticLoggerBinder; +import org.slf4j.impl.StaticLoggerBinderFriend; import ch.qos.logback.classic.ClassicGlobal; -import ch.qos.logback.classic.net.mock.MockInitialContext; -import ch.qos.logback.classic.net.mock.MockInitialContextFactory; +import ch.qos.logback.classic.util.MockInitialContext; +import ch.qos.logback.classic.util.MockInitialContextFactory; import ch.qos.logback.core.Context; -public class ContextJNDISelectorTest extends TestCase { +public class ContextJNDISelectorTest { static String INITIAL_CONTEXT_KEY = "java.naming.factory.initial"; - @Override - protected void setUp() throws Exception { - super.setUp(); + @Before + public void setUp() throws Exception { System.setProperty(ClassicGlobal.LOGBACK_CONTEXT_SELECTOR, "JNDI"); - StaticLoggerBinder.SINGLETON.initialize(); + StaticLoggerBinderFriend.reset(); MockInitialContextFactory.initialize(); MockInitialContext mic = MockInitialContextFactory.getContext(); @@ -32,35 +35,38 @@ LoggerFactory.getLogger(ContextDetachingSCLTest.class); } - @Override - protected void tearDown() throws Exception { + @After + public void tearDown() throws Exception { System.clearProperty(INITIAL_CONTEXT_KEY); - super.tearDown(); } + @Test public void testGetExistingContext() { - ContextSelector selector = StaticLoggerBinder.SINGLETON.getContextSelector(); + ContextSelector selector = StaticLoggerBinder.getSingleton().getContextSelector(); Context context = selector.getLoggerContext(); assertEquals("toto", context.getName()); } + @Test public void testCreateContext() { MockInitialContext mic = MockInitialContextFactory.getContext(); mic.map.put(ClassicGlobal.JNDI_CONTEXT_NAME, "tata"); LoggerFactory.getLogger(ContextDetachingSCLTest.class); - ContextJNDISelector selector = (ContextJNDISelector)StaticLoggerBinder.SINGLETON.getContextSelector(); + ContextJNDISelector selector = (ContextJNDISelector)StaticLoggerBinder.getSingleton().getContextSelector(); Context context = selector.getLoggerContext(); assertEquals("tata", context.getName()); - assertEquals(1, selector.getCount()); + System.out.println(selector.getContextNames()); + assertEquals(2, selector.getCount()); } - public void testReturnDefaultContext() { + @Test + public void defaultContext() { MockInitialContext mic = MockInitialContextFactory.getContext(); mic.map.put(ClassicGlobal.JNDI_CONTEXT_NAME, null); - ContextJNDISelector selector = (ContextJNDISelector)StaticLoggerBinder.SINGLETON.getContextSelector(); + ContextJNDISelector selector = (ContextJNDISelector)StaticLoggerBinder.getSingleton().getContextSelector(); Context context = selector.getLoggerContext(); assertEquals("default", context.getName()); Modified: logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/selector/PackageTest.java ============================================================================== --- logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/selector/PackageTest.java (original) +++ logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/selector/PackageTest.java Thu Nov 20 19:04:55 2008 @@ -15,7 +15,7 @@ public static Test suite() { TestSuite suite = new TestSuite(); - suite.addTestSuite(ContextJNDISelectorTest.class); + suite.addTest(new JUnit4TestAdapter(ContextJNDISelectorTest.class)); suite.addTestSuite(ContextDetachingSCLTest.class); return suite; } Copied: logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/util/MockInitialContext.java (from r1899, /logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/net/mock/MockInitialContext.java) ============================================================================== --- /logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/net/mock/MockInitialContext.java (original) +++ logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/util/MockInitialContext.java Thu Nov 20 19:04:55 2008 @@ -1,4 +1,4 @@ -package ch.qos.logback.classic.net.mock; +package ch.qos.logback.classic.util; import java.util.HashMap; import java.util.Map; Copied: logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/util/MockInitialContextFactory.java (from r1899, /logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/net/mock/MockInitialContextFactory.java) ============================================================================== --- /logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/net/mock/MockInitialContextFactory.java (original) +++ logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/util/MockInitialContextFactory.java Thu Nov 20 19:04:55 2008 @@ -1,4 +1,4 @@ -package ch.qos.logback.classic.net.mock; +package ch.qos.logback.classic.util; import java.util.Hashtable; @@ -6,6 +6,7 @@ import javax.naming.NamingException; import javax.naming.spi.InitialContextFactory; + public class MockInitialContextFactory implements InitialContextFactory { static MockInitialContext mic; Modified: logback/trunk/logback-classic/src/test/java/org/dummy/DummyLBAppender.java ============================================================================== --- logback/trunk/logback-classic/src/test/java/org/dummy/DummyLBAppender.java (original) +++ logback/trunk/logback-classic/src/test/java/org/dummy/DummyLBAppender.java Thu Nov 20 19:04:55 2008 @@ -1,11 +1,11 @@ /** - * LOGBack: the generic, reliable, fast and flexible logging framework. - * - * Copyright (C) 1999-2008, QOS.ch - * - * This library is free software, you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation. + * Logback: the generic, reliable, fast and flexible logging framework. + * + * Copyright (C) 2000-2008, QOS.ch + * + * This library is free software, you can redistribute it and/or modify it under + * the terms of the GNU Lesser General Public License as published by the Free + * Software Foundation. */ package org.dummy; Added: logback/trunk/logback-classic/src/test/java/org/slf4j/LoggerFactoryFriend.java ============================================================================== --- (empty file) +++ logback/trunk/logback-classic/src/test/java/org/slf4j/LoggerFactoryFriend.java Thu Nov 20 19:04:55 2008 @@ -0,0 +1,16 @@ +/** + * Logback: the generic, reliable, fast and flexible logging framework. + * + * Copyright (C) 2000-2008, QOS.ch + * + * This library is free software, you can redistribute it and/or modify it under + * the terms of the GNU Lesser General Public License as published by the Free + * Software Foundation. + */ +package org.slf4j; + +public class LoggerFactoryFriend { + static public void reset() { + LoggerFactory.reset(); + } +} Modified: logback/trunk/logback-classic/src/test/java/org/slf4j/impl/RecursiveInitializationTest.java ============================================================================== --- logback/trunk/logback-classic/src/test/java/org/slf4j/impl/RecursiveInitializationTest.java (original) +++ logback/trunk/logback-classic/src/test/java/org/slf4j/impl/RecursiveInitializationTest.java Thu Nov 20 19:04:55 2008 @@ -1,7 +1,9 @@ package org.slf4j.impl; import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; +import java.util.List; import java.util.Random; import org.junit.After; @@ -9,12 +11,14 @@ import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.slf4j.LoggerFactoryFriend; import ch.qos.logback.classic.LoggerContext; import ch.qos.logback.classic.util.ContextInitializer; import ch.qos.logback.core.status.Status; import ch.qos.logback.core.status.StatusManager; + public class RecursiveInitializationTest { int diff = new Random().nextInt(); @@ -23,6 +27,7 @@ public void setUp() throws Exception { System.setProperty(ContextInitializer.CONFIG_FILE_PROPERTY, "recursiveInit.xml"); + LoggerFactoryFriend.reset(); } @After @@ -40,8 +45,23 @@ .getILoggerFactory(); StatusManager sm = loggerContext.getStatusManager(); - assertEquals("Initialization should proceed without errors:", sm.getLevel(), - Status.INFO); - } + assertEquals("Was expecting no errors", Status.INFO, sm.getLevel()); + + List<Status> statusList = sm.getCopyOfStatusList(); +// int errorCount = 0; +// +// for(Status s: statusList) { +// if(s.getLevel() == Status.ERROR) { +// errorCount++; +// System.out.println("=========================="); +// System.out.println(s); +// System.out.println("=========================="); +// +// assertNull("Status ["+s+"] has a throwable", s.getThrowable()); +// } +// } + // Error msg: No appenders present in context [default] for logger [ResursiveLBAppender..]. +// assertEquals("Expecting only one error", 1, errorCount); + } } Added: logback/trunk/logback-classic/src/test/java/org/slf4j/impl/StaticLoggerBinderFriend.java ============================================================================== --- (empty file) +++ logback/trunk/logback-classic/src/test/java/org/slf4j/impl/StaticLoggerBinderFriend.java Thu Nov 20 19:04:55 2008 @@ -0,0 +1,26 @@ +/** + * Logback: the generic, reliable, fast and flexible logging framework. + * + * Copyright (C) 2000-2008, QOS.ch + * + * This library is free software, you can redistribute it and/or modify it under + * the terms of the GNU Lesser General Public License as published by the Free + * Software Foundation. + */ + +package org.slf4j.impl; + +/** + * This class grants public access to package protected methods of + * StaticLoggerBinder. Used for testing purposes. + * + * @author Ceki Gulcu + * + */ +public class StaticLoggerBinderFriend { + + static public void reset() { + StaticLoggerBinder.reset(); + } + +} Added: logback/trunk/logback-classic/src/test/resources/recursiveInit.xml ============================================================================== --- (empty file) +++ logback/trunk/logback-classic/src/test/resources/recursiveInit.xml Thu Nov 20 19:04:55 2008 @@ -0,0 +1,18 @@ +<configuration> + + <appender name="STDOUT" + class="ch.qos.logback.core.ConsoleAppender"> + <layout class="ch.qos.logback.classic.PatternLayout"> + <param name="Pattern" + value="TEST %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n" /> + </layout> + </appender> + + + <appender name="RECURSIVE" class="org.slf4j.impl.RecursiveLBAppender"/> + + <root level="DEBUG" > + <appender-ref ref="STDOUT" /> + <appender-ref ref="RECURSIVE" /> + </root> +</configuration> \ No newline at end of file
participants (1)
-
noreply.ceki@qos.ch