
Author: ceki Date: Tue Feb 27 12:23:16 2007 New Revision: 1360 Removed: logback/trunk/logback-classic/src/main/java/org/slf4j/LoggerFactory.java logback/trunk/logback-classic/src/main/java/org/slf4j/MarkerFactory.java 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/LoggerContextFilter.java logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/spi/LoggingEvent.java logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/spi/LoggingEventExt.java logback/trunk/logback-classic/src/main/java/org/slf4j/impl/StaticLoggerBinder.java logback/trunk/logback-classic/src/main/java/org/slf4j/impl/StaticMarkerBinder.java logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/HLogger.java logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/control/ControlLogger.java 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/selector/ContextDetachingSCLTest.java logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/selector/ContextJNDISelectorTest.java Log: Syncing with SLF4J 1.3.0: - Removed org.slf4j.LoggerFactory and migrated ContextSelector related initialization code to org.slf4j.impl.StaticLoggerBinder - Minor adjustments in test cases 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 Tue Feb 27 12:23:16 2007 @@ -18,7 +18,7 @@ import javax.servlet.ServletContextListener; import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.slf4j.impl.StaticLoggerBinder; import ch.qos.logback.classic.LoggerContext; import ch.qos.logback.classic.selector.ContextSelector; @@ -26,7 +26,7 @@ public class ContextDetachingSCL implements ServletContextListener { - public void contextDestroyed(ServletContextEvent arg0) { + public void contextDestroyed(ServletContextEvent servletContextEvent) { String loggerContextName = null; try { @@ -38,7 +38,7 @@ if (loggerContextName != null) { System.out.println("About to detach context named " + loggerContextName); - ContextSelector selector = LoggerFactory.getContextSelector(); + ContextSelector selector = StaticLoggerBinder.SINGLETON.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 Tue Feb 27 12:23:16 2007 @@ -20,6 +20,7 @@ import javax.servlet.ServletResponse; import org.slf4j.LoggerFactory; +import org.slf4j.impl.StaticLoggerBinder; import ch.qos.logback.classic.LoggerContext; import ch.qos.logback.classic.selector.ContextJNDISelector; @@ -56,7 +57,7 @@ FilterChain chain) throws IOException, ServletException { LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory(); - ContextSelector selector = LoggerFactory.getContextSelector(); + ContextSelector selector = StaticLoggerBinder.SINGLETON.getContextSelector(); ContextJNDISelector sel = null; if (selector instanceof ContextJNDISelector) { Modified: logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/spi/LoggingEvent.java ============================================================================== --- logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/spi/LoggingEvent.java (original) +++ logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/spi/LoggingEvent.java Tue Feb 27 12:23:16 2007 @@ -17,7 +17,7 @@ import java.util.Map; import org.slf4j.Marker; -import org.slf4j.impl.MessageFormatter; +import org.slf4j.helpers.MessageFormatter; import ch.qos.logback.classic.Level; import ch.qos.logback.classic.Logger; Modified: logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/spi/LoggingEventExt.java ============================================================================== --- logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/spi/LoggingEventExt.java (original) +++ logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/spi/LoggingEventExt.java Tue Feb 27 12:23:16 2007 @@ -18,7 +18,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.slf4j.Marker; -import org.slf4j.impl.MessageFormatter; +import org.slf4j.helpers.MessageFormatter; import ch.qos.logback.classic.Level; 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 Tue Feb 27 12:23:16 2007 @@ -11,9 +11,16 @@ import org.slf4j.ILoggerFactory; import org.slf4j.LoggerFactory; +import org.slf4j.helpers.Util; import org.slf4j.spi.LoggerFactoryBinder; +import ch.qos.logback.classic.ClassicGlobal; import ch.qos.logback.classic.LoggerContext; +import ch.qos.logback.classic.selector.ContextJNDISelector; +import ch.qos.logback.classic.selector.ContextSelector; +import ch.qos.logback.classic.selector.DefaultContextSelector; +import ch.qos.logback.classic.util.ContextInitializer; +import ch.qos.logback.core.util.OptionHelper; /** * @@ -24,30 +31,61 @@ */ public class StaticLoggerBinder implements LoggerFactoryBinder { + private ContextSelector contextSelector; + /** * The unique instance of this class. */ public static final StaticLoggerBinder SINGLETON = new StaticLoggerBinder(); - private static final String loggerFactoryClassStr = LoggerContext.class + private static final String loggerFactoryClassStr = ContextSelector.class .getName(); - /** - * The ILoggerFactory instance returned by the {@link #getLoggerFactory} - * method should always be the same object - */ - private final ILoggerFactory loggerFactory; - private StaticLoggerBinder() { - LoggerContext lc = new LoggerContext(); - lc.setName("default"); - loggerFactory = lc; + initialize(); + } + + public void initialize() { + try { + // let's configure a default context + LoggerContext defaultLoggerContext = new LoggerContext(); + defaultLoggerContext.setName("default"); + ContextInitializer.autoConfig(defaultLoggerContext); + + // See if a special context selector is needed + String contextSelectorStr = OptionHelper.getSystemProperty( + ClassicGlobal.LOGBACK_CONTEXT_SELECTOR, null); + if (contextSelectorStr == null) { + contextSelector = new DefaultContextSelector(defaultLoggerContext); + } else if (contextSelectorStr.equals("JNDI")) { + // if jndi is specified, let's use the appropriate class + contextSelector = new ContextJNDISelector(defaultLoggerContext); + } + } catch (Exception e) { + // we should never get here + Util.reportFailure("Failed to instantiate [" + + LoggerContext.class.getName() + "]", e); + } } public ILoggerFactory getLoggerFactory() { - return loggerFactory; + if (contextSelector == null) { + throw new IllegalStateException( + "contextSelector cannot be null. See also http://logback.qos.ch/codes.html#null_CS"); + } + return contextSelector.getLoggerContext(); } public String getLoggerFactoryClassStr() { return loggerFactoryClassStr; } + + /** + * Return the {@link ContextSelector} instance in use. + * + * @return the ContextSelector instance in use + */ + public ContextSelector getContextSelector() { + return contextSelector; + } + } Modified: logback/trunk/logback-classic/src/main/java/org/slf4j/impl/StaticMarkerBinder.java ============================================================================== --- logback/trunk/logback-classic/src/main/java/org/slf4j/impl/StaticMarkerBinder.java (original) +++ logback/trunk/logback-classic/src/main/java/org/slf4j/impl/StaticMarkerBinder.java Tue Feb 27 12:23:16 2007 @@ -35,6 +35,7 @@ import org.slf4j.IMarkerFactory; import org.slf4j.MarkerFactory; +import org.slf4j.helpers.BasicMarkerFactory; import org.slf4j.spi.MarkerFactoryBinder; /** Modified: logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/HLogger.java ============================================================================== --- logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/HLogger.java (original) +++ logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/HLogger.java Tue Feb 27 12:23:16 2007 @@ -15,7 +15,7 @@ import java.util.Iterator; import java.util.Map; -import org.slf4j.impl.MarkerIgnoringBase; +import org.slf4j.helpers.MarkerIgnoringBase; import ch.qos.logback.classic.ClassicGlobal; import ch.qos.logback.classic.Level; Modified: logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/control/ControlLogger.java ============================================================================== --- logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/control/ControlLogger.java (original) +++ logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/control/ControlLogger.java Tue Feb 27 12:23:16 2007 @@ -9,7 +9,7 @@ */ package ch.qos.logback.classic.control; -import org.slf4j.impl.MarkerIgnoringBase; +import org.slf4j.helpers.MarkerIgnoringBase; import ch.qos.logback.classic.Level; Modified: 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/net/mock/MockInitialContextFactory.java Tue Feb 27 12:23:16 2007 @@ -10,14 +10,18 @@ static MockInitialContext mic; static { + System.out.println("MockInitialContextFactory static called"); + initialize(); + } + + public static void initialize() { try { mic = new MockInitialContext(); } catch (NamingException e) { e.printStackTrace(); } - } - + public Context getInitialContext(Hashtable<?, ?> environment) throws NamingException { return mic; 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 Tue Feb 27 12:23:16 2007 @@ -2,8 +2,8 @@ import junit.framework.TestCase; -import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.slf4j.impl.StaticLoggerBinder; import ch.qos.logback.classic.ClassicGlobal; import ch.qos.logback.classic.net.mock.MockInitialContext; @@ -19,10 +19,11 @@ @Override protected void setUp() throws Exception { System.setProperty(ClassicGlobal.LOGBACK_CONTEXT_SELECTOR, "JNDI"); - LoggerFactory.setup(); + //LoggerFactory.setup(); listener = new ContextDetachingSCL(); + MockInitialContextFactory.initialize(); MockInitialContext mic = MockInitialContextFactory.getContext(); mic.map.put(ClassicGlobal.JNDI_CONTEXT_NAME, "toto"); @@ -30,8 +31,7 @@ System.setProperty(INITIAL_CONTEXT_KEY, MockInitialContextFactory.class.getName()); //this call will create the context "toto" - @SuppressWarnings("unused") - Logger logger = LoggerFactory.getLogger(ContextDetachingSCLTest.class); + LoggerFactory.getLogger(ContextDetachingSCLTest.class); super.setUp(); } @@ -43,19 +43,21 @@ } public void testDetach() { - ContextJNDISelector selector = (ContextJNDISelector) LoggerFactory.getContextSelector(); + ContextJNDISelector selector = (ContextJNDISelector) StaticLoggerBinder.SINGLETON.getContextSelector(); listener.contextDestroyed(null); - assertEquals(0, selector.getCount()); } public void testDetachWithMissingContext() { MockInitialContext mic = MockInitialContextFactory.getContext(); mic.map.put(ClassicGlobal.JNDI_CONTEXT_NAME, "tata"); - - ContextJNDISelector selector = (ContextJNDISelector) LoggerFactory.getContextSelector(); + ContextJNDISelector selector = (ContextJNDISelector) StaticLoggerBinder.SINGLETON.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()); } 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 Tue Feb 27 12:23:16 2007 @@ -2,28 +2,26 @@ import junit.framework.TestCase; -import org.slf4j.Logger; import org.slf4j.LoggerFactory; +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.core.Context; public class ContextJNDISelectorTest extends TestCase { static String INITIAL_CONTEXT_KEY = "java.naming.factory.initial"; - ContextDetachingSCL listener; - @Override protected void setUp() throws Exception { - System.setProperty(ClassicGlobal.LOGBACK_CONTEXT_SELECTOR, "JNDI"); - LoggerFactory.setup(); + super.setUp(); - listener = new ContextDetachingSCL(); + System.setProperty(ClassicGlobal.LOGBACK_CONTEXT_SELECTOR, "JNDI"); + StaticLoggerBinder.SINGLETON.initialize(); + MockInitialContextFactory.initialize(); MockInitialContext mic = MockInitialContextFactory.getContext(); mic.map.put(ClassicGlobal.JNDI_CONTEXT_NAME, "toto"); @@ -31,10 +29,7 @@ System.setProperty(INITIAL_CONTEXT_KEY, MockInitialContextFactory.class.getName()); //this call will create the context "toto" - @SuppressWarnings("unused") - Logger logger = LoggerFactory.getLogger(ContextDetachingSCLTest.class); - - super.setUp(); + LoggerFactory.getLogger(ContextDetachingSCLTest.class); } @Override @@ -44,7 +39,7 @@ } public void testGetExistingContext() { - ContextSelector selector = LoggerFactory.getContextSelector(); + ContextSelector selector = StaticLoggerBinder.SINGLETON.getContextSelector(); Context context = selector.getLoggerContext(); assertEquals("toto", context.getName()); } @@ -53,20 +48,19 @@ MockInitialContext mic = MockInitialContextFactory.getContext(); mic.map.put(ClassicGlobal.JNDI_CONTEXT_NAME, "tata"); - @SuppressWarnings("unused") - Logger logger = LoggerFactory.getLogger(ContextDetachingSCLTest.class); + LoggerFactory.getLogger(ContextDetachingSCLTest.class); - ContextJNDISelector selector = (ContextJNDISelector)LoggerFactory.getContextSelector(); + ContextJNDISelector selector = (ContextJNDISelector)StaticLoggerBinder.SINGLETON.getContextSelector(); Context context = selector.getLoggerContext(); assertEquals("tata", context.getName()); - assertEquals(2, selector.getCount()); + assertEquals(1, selector.getCount()); } public void testReturnDefaultContext() { MockInitialContext mic = MockInitialContextFactory.getContext(); mic.map.put(ClassicGlobal.JNDI_CONTEXT_NAME, null); - ContextJNDISelector selector = (ContextJNDISelector)LoggerFactory.getContextSelector(); + ContextJNDISelector selector = (ContextJNDISelector)StaticLoggerBinder.SINGLETON.getContextSelector(); Context context = selector.getLoggerContext(); assertEquals("default", context.getName());