svn commit: r1742 - in logback/trunk/logback-classic/src: main/java/ch/qos/logback/classic main/java/ch/qos/logback/classic/util test/java/ch/qos/logback/classic/util

Author: ceki Date: Thu Aug 7 16:58:04 2008 New Revision: 1742 Modified: logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/LoggerContext.java logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/util/ContextInitializer.java logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/util/StatusListenerConfigHelper.java logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/util/InitializationTest.java Log: Relates to LBCLASSIC-59 LBCLASSIC-58 - unit testing addition of status listener by logback.statusListenerClass system property Modified: logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/LoggerContext.java ============================================================================== --- logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/LoggerContext.java (original) +++ logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/LoggerContext.java Thu Aug 7 16:58:04 2008 @@ -31,13 +31,15 @@ import ch.qos.logback.core.spi.FilterReply; import ch.qos.logback.core.spi.LifeCycle; import ch.qos.logback.core.status.ErrorStatus; +import ch.qos.logback.core.status.StatusListener; +import ch.qos.logback.core.status.StatusManager; /** - * LoggerContext glues many of the logback-classic components together. In principle, - * every logback-classic component instance is attached either directly or indirecty - * to a LoggerContext instance. Just as importantly LoggerContext implements the - * {@link ILoggerFactory} acting as the manufacturing source of {@link Logger} - * instances. + * LoggerContext glues many of the logback-classic components together. In + * principle, every logback-classic component instance is attached either + * directly or indirecty to a LoggerContext instance. Just as importantly + * LoggerContext implements the {@link ILoggerFactory} acting as the + * manufacturing source of {@link Logger} instances. * * @author Ceki Gulcu */ @@ -160,7 +162,7 @@ * reference, otherwise returns <code>null</code>. * * @param name - * the name of the logger to search for. + * the name of the logger to search for. */ public Logger exists(String name) { return (Logger) loggerCache.get(name); @@ -180,7 +182,7 @@ Collections.sort(loggerList, new LoggerComparator()); return loggerList; } - + public LoggerContextRemoteView getLoggerContextRemoteView() { return loggerContextRemoteView; } @@ -189,6 +191,15 @@ root.recursiveReset(); clearAllTurboFilters(); fireOnReset(); + // TODO is it a good idea to reset the status listeners? + resetStatusListeners(); + } + + void resetStatusListeners() { + StatusManager sm = getStatusManager(); + for (StatusListener sl : sm.getCopyOfStatusListenerList()) { + sm.remove(sl); + } } public void addTurboFilter(TurboFilter newFilter) { @@ -215,7 +226,7 @@ return cfai.getTurboFilterChainDecision(marker, logger, level, format, params, t); } - + final public FilterReply getTurboFilterChainDecision(final Marker marker, final Logger logger, final Level level, final String format, final Object param, final Throwable t) { @@ -223,9 +234,9 @@ return FilterReply.NEUTRAL; } return cfai.getTurboFilterChainDecision(marker, logger, level, format, - new Object[]{param}, t); + new Object[] { param }, t); } - + final public FilterReply getTurboFilterChainDecision(final Marker marker, final Logger logger, final Level level, final String format, final Object param1, final Object param2, final Throwable t) { @@ -233,7 +244,7 @@ return FilterReply.NEUTRAL; } return cfai.getTurboFilterChainDecision(marker, logger, level, format, - new Object[]{param1, param2}, t); + new Object[] { param1, param2 }, t); } public TurboFilter getFirstTurboFilter() { Modified: logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/util/ContextInitializer.java ============================================================================== --- logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/util/ContextInitializer.java (original) +++ logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/util/ContextInitializer.java Thu Aug 7 16:58:04 2008 @@ -22,7 +22,9 @@ final public static String AUTOCONFIG_FILE = "logback.xml"; final public static String TEST_AUTOCONFIG_FILE = "logback-test.xml"; final public static String CONFIG_FILE_PROPERTY = "logback.configurationFile"; - + final public static String STATUS_LISTENER_CLASS = "logback.statusListenerClass"; + final public static String SYSOUT = "SYSOUT"; + public static void configureByResource(LoggerContext loggerContext, URL url) throws JoranException { if (url == null) { @@ -80,6 +82,5 @@ ClassLoader tccl = Loader.getTCL(); autoConfig(loggerContext, tccl); } - } Modified: logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/util/StatusListenerConfigHelper.java ============================================================================== --- logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/util/StatusListenerConfigHelper.java (original) +++ logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/util/StatusListenerConfigHelper.java Thu Aug 7 16:58:04 2008 @@ -7,27 +7,23 @@ public class StatusListenerConfigHelper { - final public static String STATUS_LISTENER_CLASS = "logback.statusListenerClass"; - final public static String SYSOUT = "SYSOUT"; - - static void installIfAsked(LoggerContext loggerContext) { - String slClass = System.getProperty(STATUS_LISTENER_CLASS, null); + String slClass = System.getProperty( + ContextInitializer.STATUS_LISTENER_CLASS, null); if (!OptionHelper.isEmpty(slClass)) { addStatusListener(loggerContext, slClass); - } + } } - + static void addStatusListener(LoggerContext loggerContext, String listenerClass) { StatusListener listener = null; - if (SYSOUT.equalsIgnoreCase(listenerClass)) { + if (ContextInitializer.SYSOUT.equalsIgnoreCase(listenerClass)) { listener = new OnConsoleStatusListener(); } else { try { listener = (StatusListener) OptionHelper.instantiateByClassName( listenerClass, StatusListener.class, loggerContext); - loggerContext.getStatusManager().add(listener); } catch (Exception e) { // printing on the console is the best we can do e.printStackTrace(); Modified: logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/util/InitializationTest.java ============================================================================== --- logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/util/InitializationTest.java (original) +++ logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/util/InitializationTest.java Thu Aug 7 16:58:04 2008 @@ -1,7 +1,16 @@ package ch.qos.logback.classic.util; -import junit.framework.TestCase; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.assertEquals; + +import java.util.List; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; import org.slf4j.LoggerFactory; import ch.qos.logback.classic.Logger; @@ -9,32 +18,38 @@ import ch.qos.logback.core.Appender; import ch.qos.logback.core.ConsoleAppender; import ch.qos.logback.core.joran.spi.JoranException; +import ch.qos.logback.core.status.StatusListener; +import ch.qos.logback.core.status.TrivialStatusListener; -public class InitializationTest extends TestCase { +public class InitializationTest { org.slf4j.Logger logger = LoggerFactory.getLogger(InitializationTest.class); LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory(); Logger root = (Logger) LoggerFactory.getLogger("root"); - protected void setUp() throws Exception { - super.setUp(); + @Before + public void setUp() throws Exception { logger.debug("Hello-didily-odily"); - } - protected void tearDown() throws Exception { - super.tearDown(); + @After + public void tearDown() throws Exception { System.clearProperty(ContextInitializer.CONFIG_FILE_PROPERTY); + System.clearProperty(ContextInitializer.STATUS_LISTENER_CLASS); + lc.shutdownAndReset(); } + @Test public void testAutoconfig() { Appender appender = root.getAppender("STDOUT"); assertNotNull(appender); assertTrue(appender instanceof ConsoleAppender); } - public void testReset() { + @Test + public void testReset() throws JoranException { { + ContextInitializer.autoConfig(lc); Appender appender = root.getAppender("STDOUT"); assertNotNull(appender); assertTrue(appender instanceof ConsoleAppender); @@ -46,17 +61,39 @@ } } + @Test public void testAutoConfigFromSystemProperties() throws JoranException { doAutoConfigFromSystemProperties(TeztConstants.TEST_DIR_PREFIX + "input/autoConfig.xml"); doAutoConfigFromSystemProperties("autoConfigAsResource.xml"); // test passing a URL. note the relative path syntax with file:src/test/... doAutoConfigFromSystemProperties("file:"+TeztConstants.TEST_DIR_PREFIX + "input/autoConfig.xml"); } + public void doAutoConfigFromSystemProperties(String val) throws JoranException { - lc.shutdownAndReset(); + //lc.shutdownAndReset(); System.setProperty(ContextInitializer.CONFIG_FILE_PROPERTY, val); ContextInitializer.autoConfig(lc); Appender appender = root.getAppender("AUTO_BY_SYSTEM_PROPERTY"); assertNotNull(appender); } + + @Test + public void teztAutoStatusListener() throws JoranException { + System.setProperty(ContextInitializer.STATUS_LISTENER_CLASS, TrivialStatusListener.class.getName()); + List<StatusListener> sll = lc.getStatusManager().getCopyOfStatusListenerList(); + assertEquals(0, sll.size()); + doAutoConfigFromSystemProperties(TeztConstants.TEST_DIR_PREFIX + "input/autoConfig.xml"); + sll = lc.getStatusManager().getCopyOfStatusListenerList(); + assertTrue(sll.size() +" should be 1", sll.size() == 1); + } + + @Test + public void teztAutoOnConsoleStatusListener() throws JoranException { + System.setProperty(ContextInitializer.STATUS_LISTENER_CLASS, ContextInitializer.SYSOUT); + List<StatusListener> sll = lc.getStatusManager().getCopyOfStatusListenerList(); + assertEquals(0, sll.size()); + doAutoConfigFromSystemProperties(TeztConstants.TEST_DIR_PREFIX + "input/autoConfig.xml"); + sll = lc.getStatusManager().getCopyOfStatusListenerList(); + assertTrue(sll.size() +" should be 1", sll.size() == 1); + } }
participants (1)
-
noreply.ceki@qos.ch