svn commit: r811 - in logback/trunk/logback-classic/src: main/java/ch/qos/logback main/java/ch/qos/logback/classic main/java/ch/qos/logback/classic/util main/java/org/slf4j main/java/org/slf4j/impl test/java/ch/qos/logback/classic/util test/resources

Author: ceki Date: Sun Oct 29 22:15:05 2006 New Revision: 811 Added: logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/util/ContextInitializer.java logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/util/InitializationTest.java logback/trunk/logback-classic/src/test/resources/logback-test.xml Modified: logback/trunk/logback-classic/src/main/java/ch/qos/logback/BasicConfigurator.java logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/Logger.java logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/LoggerContext.java logback/trunk/logback-classic/src/main/java/org/slf4j/LoggerFactory.java logback/trunk/logback-classic/src/main/java/org/slf4j/impl/StaticLoggerBinder.java Log: ongoing work on auto configuration Modified: logback/trunk/logback-classic/src/main/java/ch/qos/logback/BasicConfigurator.java ============================================================================== --- logback/trunk/logback-classic/src/main/java/ch/qos/logback/BasicConfigurator.java (original) +++ logback/trunk/logback-classic/src/main/java/ch/qos/logback/BasicConfigurator.java Sun Oct 29 22:15:05 2006 @@ -1,3 +1,13 @@ +/** + * Logback: the generic, reliable, fast and flexible logging framework. + * + * 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. + */ + package ch.qos.logback; import org.slf4j.LoggerFactory; @@ -9,22 +19,22 @@ public class BasicConfigurator { - public static void configure(LoggerContext lc) { - ConsoleAppender ca = new ConsoleAppender(); - ca.setContext(lc); - ca.setName("console"); - PatternLayout pl = new PatternLayout(); - pl.setPattern("%-4relative [%thread] %-5level %class - %msg%n"); - pl.start(); - - ca.setLayout(pl); - ca.start(); - Logger rootLogger = lc.getLogger(LoggerContext.ROOT_NAME); - rootLogger.addAppender(ca); - } - - public static void configureDefaultContext() { - LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory(); - configure(lc); - } + public static void configure(LoggerContext lc) { + ConsoleAppender ca = new ConsoleAppender(); + ca.setContext(lc); + ca.setName("console"); + PatternLayout pl = new PatternLayout(); + pl.setPattern("%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"); + pl.start(); + + ca.setLayout(pl); + ca.start(); + Logger rootLogger = lc.getLogger(LoggerContext.ROOT_NAME); + rootLogger.addAppender(ca); + } + + public static void configureDefaultContext() { + LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory(); + configure(lc); + } } Modified: logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/Logger.java ============================================================================== --- logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/Logger.java (original) +++ logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/Logger.java Sun Oct 29 22:15:05 2006 @@ -337,6 +337,14 @@ return childLogger; } + void recursiveReset() { + detachAndStopAllAppenders(); + additive = true; + for(Logger childLogger: childrenList) { + childLogger.recursiveReset(); + } + } + /** * The default size of child list arrays. The JDK 1.5 default is 10. We use a * smaller value to save a little space. 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 Sun Oct 29 22:15:05 2006 @@ -154,4 +154,9 @@ public LoggerContextRemoteView getLoggerContextRemoteView() { return loggerContextRemoteView; } + + public void reset() { + root.recursiveReset(); + + } } Added: logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/util/ContextInitializer.java ============================================================================== --- (empty file) +++ logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/util/ContextInitializer.java Sun Oct 29 22:15:05 2006 @@ -0,0 +1,44 @@ +package ch.qos.logback.classic.util; + +import java.net.URL; + +import ch.qos.logback.BasicConfigurator; +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.Loader; +import ch.qos.logback.core.util.StatusPrinter; + +public class ContextInitializer { + + final public static String AUTOCONFIG_FILE = "logback.xml"; + final public static String TEST_AUTOCONFIG_FILE = "logback-test.xml"; + + public static void configureByResource(LoggerContext loggerContext, URL url) + throws JoranException { + if (url == null) { + throw new IllegalArgumentException("URL argument cannot be null"); + } + JoranConfigurator configurator = new JoranConfigurator(); + configurator.setContext(loggerContext); + configurator.doConfigure(url); + } + + public static void autoConfig(LoggerContext loggerContext) { + + URL url = Loader.getResource(AUTOCONFIG_FILE); + if (url == null) { + url = Loader.getResource(TEST_AUTOCONFIG_FILE); + } + + if (url != null) { + try { + configureByResource(loggerContext, url); + } catch (JoranException je) { + StatusPrinter.print(loggerContext); + } + } else { + BasicConfigurator.configure(loggerContext); + } + } +} Modified: logback/trunk/logback-classic/src/main/java/org/slf4j/LoggerFactory.java ============================================================================== --- logback/trunk/logback-classic/src/main/java/org/slf4j/LoggerFactory.java (original) +++ logback/trunk/logback-classic/src/main/java/org/slf4j/LoggerFactory.java Sun Oct 29 22:15:05 2006 @@ -32,16 +32,11 @@ */ package org.slf4j; -import java.net.URL; - -import org.slf4j.impl.StaticLoggerBinder; import org.slf4j.impl.Util; -import ch.qos.logback.classic.joran.JoranConfigurator; -import ch.qos.logback.core.Context; -import ch.qos.logback.core.util.Loader; -import ch.qos.logback.core.util.StatusPrinter; - +import ch.qos.logback.classic.LoggerContext; +import ch.qos.logback.classic.util.ContextInitializer; + /** * The <code>LoggerFactory</code> is a utility class producing Loggers for * various logging APIs, most notably for NLOG4J and JDK 1.4 logging. Other @@ -60,7 +55,7 @@ */ public final class LoggerFactory { - static ILoggerFactory loggerFactory; + static LoggerContext loggerContext; // private constructor prevents instantiation private LoggerFactory() { @@ -69,20 +64,13 @@ static { try { - loggerFactory = StaticLoggerBinder.SINGLETON.getLoggerFactory(); - URL url = Loader.getResource("logback-classic.xml"); - if (url != null) { - JoranConfigurator configurator = new JoranConfigurator(); - configurator.setContext((Context)loggerFactory); - configurator.doConfigure(url); - StatusPrinter.print((Context)loggerFactory); - } else { - //TODO basic configuration?? - } + loggerContext = new LoggerContext(); + loggerContext.setName("default"); + ContextInitializer.autoConfig(loggerContext); } catch (Exception e) { // we should never get here Util.reportFailure("Failed to instantiate logger [" - + StaticLoggerBinder.SINGLETON.getLoggerFactoryClassStr() + "]", e); + + LoggerContext.class + "]", e); } } @@ -95,7 +83,7 @@ * @return logger */ public static Logger getLogger(String name) { - return loggerFactory.getLogger(name); + return loggerContext.getLogger(name); } /** @@ -107,7 +95,7 @@ * @return logger */ public static Logger getLogger(Class clazz) { - return loggerFactory.getLogger(clazz.getName()); + return loggerContext.getLogger(clazz.getName()); } /** @@ -119,6 +107,6 @@ * @return the ILoggerFactory instance in use */ public static ILoggerFactory getILoggerFactory() { - return loggerFactory; + return loggerContext; } } 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 Sun Oct 29 22:15:05 2006 @@ -1,3 +1,12 @@ +/** + * Logback: the generic, reliable, fast and flexible logging framework. + * + * 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. + */ package org.slf4j.impl; import org.slf4j.ILoggerFactory; @@ -8,8 +17,8 @@ /** * - * The binding of {@link LoggerFactory} class with an actual instance of - * {@link ILoggerFactory} is performed using information returned by this class. + * The binding of {@link LoggerFactory} class with an actual instance of + * {@link ILoggerFactory} is performed using information returned by this class. * * @author <a href="http://www.qos.ch/log4j/">Ceki Gülcü</a> */ @@ -19,24 +28,26 @@ * The unique instance of this class. */ public static final StaticLoggerBinder SINGLETON = new StaticLoggerBinder(); - private static final String loggerFactoryClassStr = LoggerContext.class.getName(); + private static final String loggerFactoryClassStr = LoggerContext.class + .getName(); - /** The ILoggerFactory instance returned by the {@link #getLoggerFactory} method - * should always be the same object + /** + * 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"); + LoggerContext lc = new LoggerContext(); + lc.setName("default"); loggerFactory = lc; } - + public ILoggerFactory getLoggerFactory() { return loggerFactory; } - + public String getLoggerFactoryClassStr() { return loggerFactoryClassStr; - } + } } Added: logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/util/InitializationTest.java ============================================================================== --- (empty file) +++ logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/util/InitializationTest.java Sun Oct 29 22:15:05 2006 @@ -0,0 +1,31 @@ +package ch.qos.logback.classic.util; + +import junit.framework.TestCase; + + +import org.slf4j.LoggerFactory; + +import ch.qos.logback.classic.Logger; +import ch.qos.logback.core.Appender; +import ch.qos.logback.core.ConsoleAppender; + +public class InitializationTest extends TestCase { + + protected void setUp() throws Exception { + super.setUp(); + } + + protected void tearDown() throws Exception { + super.tearDown(); + } + + public void test() { + org.slf4j.Logger logger = LoggerFactory.getLogger(InitializationTest.class); + logger.debug("Hello-didily-odily"); + + Logger root = (Logger) LoggerFactory.getLogger("root"); + Appender appender = root.getAppender("STDOUT"); + assertNotNull(appender); + assertTrue(appender instanceof ConsoleAppender); + } +} Added: logback/trunk/logback-classic/src/test/resources/logback-test.xml ============================================================================== --- (empty file) +++ logback/trunk/logback-classic/src/test/resources/logback-test.xml Sun Oct 29 22:15:05 2006 @@ -0,0 +1,15 @@ +<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> + + <root> + <level value="debug" /> + <appender-ref ref="STDOUT" /> + </root> +</configuration> \ No newline at end of file
participants (1)
-
noreply.ceki@qos.ch