Proposal: What: Making the Log-Level of the root category manageable by the BasicConfigurator
How: Adding the methods configure(Level level) and configure(Appender appender, Level level) Why: In some cases it would be nice to turn of low level (for instance DEBUG) loggings without or before using a config file. Enableing this in the BasicConfigurator is more convenient for the Developer as going over the root Logger itself Example 1: A small (Test?) project, where using a conf file is to much overhead Example 2: (A real case that brought me to change the code) Imaging a project that uses a XML Config file to config the names and pathes of all the needed files (And of course some other stuff). One of these files is the Log4J conf file. Now this project uses some XML-Helper classes to read the programs config file which are also using Log4J logging. This leads to the case, that when we use only the BasicConfigurator at the beginning, we get a lot of "debug" log statments out of the "read-the-xml-configfile-helper-classes" until we have extracted the path of the Log4J conf file so we can use it. This is pretty annoying, because I allready know my helper-classes are working and don't want to see the debug and info loggings. I added two Versions of BasicConfigurator with 4 configure methods. The 1st version is similar to the existing version and every method do its own stuff. The 2nd version makes the settings only in the configure(appender, level) method. The other 3 methods only substitue the "missing" settings and call configure(appender, level) with these. I like the 2nd Version more, but i think this is a question of personal Taste Code Version 1 ####################################################################### /* * Copyright (C) The Apache Software Foundation. All rights reserved. * * This software is published under the terms of the Apache Software * License version 1.1, a copy of which has been included with this * distribution in the LICENSE.txt file. */ // Contibutors: "Luke Blanshard" <[EMAIL PROTECTED]> // "Mark DONSZELMANN" <[EMAIL PROTECTED]> // "Muly Oved" <[EMAIL PROTECTED]> // "Simon Klaiber" <[EMAIL PROTECTED]> package org.apache.log4j; import org.apache.log4j.helpers.LogLog; import org.apache.log4j.helpers.Loader; import org.apache.log4j.helpers.OptionConverter; import org.apache.log4j.spi.LoggerRepository; import org.apache.log4j.spi.RendererSupport; import org.apache.log4j.or.ObjectRenderer; import org.apache.log4j.or.RendererMap; import java.util.Enumeration; /** Use this class to quickly configure the package. <p>For file based configuration see {@link PropertyConfigurator}. For XML based configuration see {@link org.apache.log4j.xml.DOMConfigurator DOMConfigurator}. @since 0.8.1 @author Ceki Gülcü */ public class BasicConfigurator { protected BasicConfigurator() { } /** Add a {@link FileAppender} that uses {@link PatternLayout} using the {@link PatternLayout#TTCC_CONVERSION_PATTERN} and prints to <code>System.out</code> to the root category and sets the LogLevel of the root category to DEBUG. */ static public void configure() { Logger root = Logger.getRoot(); root.addAppender(new ConsoleAppender( new PatternLayout(PatternLayout.TTCC_CONVERSION_PATTERN))); } /** Add <code>appender</code> to the root category. @param appender The appender to add to the root category. */ static public void configure(Appender appender) { Logger root = Logger.getRoot(); root.addAppender(appender); } /** Add a {@link FileAppender} that uses {@link PatternLayout} using the {@link PatternLayout#TTCC_CONVERSION_PATTERN} and prints to <code>System.out</code> to the root category and sets the LogLevel of the root category to <code>level</code>. @param level The Log Level that should be used */ static public void configure(Level level) { Logger root = Logger.getRoot(); root.addAppender(new ConsoleAppender( new PatternLayout(PatternLayout.TTCC_CONVERSION_PATTERN))); root.setLevel(level); } /** Add <code>appender</code> to the root category and sets the LogLevel of the root category to <code>level</code>. @param appender The appender to add to the root category. @param level The Log Level that should be used */ static public void configure(Appender appender, Level level) { Logger root = Logger.getRoot(); root.addAppender(appender); root.setLevel(level); } /** Reset the default hierarchy to its defaut. It is equivalent to calling <code>Category.getDefaultHierarchy().resetConfiguration()</code>. See {@link Hierarchy#resetConfiguration()} for more details. */ public static void resetConfiguration() { LogManager.resetConfiguration(); } } ######################################################################## Code Version 2 ######################################################################## /* * Copyright (C) The Apache Software Foundation. All rights reserved. * * This software is published under the terms of the Apache Software * License version 1.1, a copy of which has been included with this * distribution in the LICENSE.txt file. */ // Contibutors: "Luke Blanshard" <[EMAIL PROTECTED]> // "Mark DONSZELMANN" <[EMAIL PROTECTED]> // "Muly Oved" <[EMAIL PROTECTED]> // "Simon Klaiber" <[EMAIL PROTECTED]> package org.apache.log4j; import org.apache.log4j.helpers.LogLog; import org.apache.log4j.helpers.Loader; import org.apache.log4j.helpers.OptionConverter; import org.apache.log4j.spi.LoggerRepository; import org.apache.log4j.spi.RendererSupport; import org.apache.log4j.or.ObjectRenderer; import org.apache.log4j.or.RendererMap; import java.util.Enumeration; /** Use this class to quickly configure the package. <p>For file based configuration see {@link PropertyConfigurator}. For XML based configuration see {@link org.apache.log4j.xml.DOMConfigurator DOMConfigurator}. @since 0.8.1 @author Ceki Gülcü */ public class BasicConfigurator { protected BasicConfigurator() { } /** Add a {@link FileAppender} that uses {@link PatternLayout} using the {@link PatternLayout#TTCC_CONVERSION_PATTERN} and prints to <code>System.out</code> to the root category and sets the LogLevel of the root category to DEBUG. */ static public void configure() { ConsoleAppender appender = new ConsoleAppender( new PatternLayout(PatternLayout.TTCC_CONVERSION_PATTERN)); Level level = Level.DEBUG; configure(appender, level); } /** Add <code>appender</code> to the root category. @param appender The appender to add to the root category. */ static public void configure(Appender appender) { Level level = Level.DEBUG; configure(appender, level); } /** Add a {@link FileAppender} that uses {@link PatternLayout} using the {@link PatternLayout#TTCC_CONVERSION_PATTERN} and prints to <code>System.out</code> to the root category and sets the LogLevel of the root category to <code>level</code>. @param level The Log Level that should be used */ static public void configure(Level level) { ConsoleAppender appender = new ConsoleAppender( new PatternLayout(PatternLayout.TTCC_CONVERSION_PATTERN)); configure(appender, level); } /** Add <code>appender</code> to the root category and sets the LogLevel of the root category to <code>level</code>. @param appender The appender to add to the root category. @param level The Log Level that should be used */ static public void configure(Appender appender, Level level) { Logger root = Logger.getRoot(); root.addAppender(appender); root.setLevel(level); } /** Reset the default hierarchy to its defaut. It is equivalent to calling <code>Category.getDefaultHierarchy().resetConfiguration()</code>. See {@link Hierarchy#resetConfiguration()} for more details. */ public static void resetConfiguration() { LogManager.resetConfiguration(); } } ######################################################################## Bye Simon Klaiber Frankfurt Germany -------------------------------------------------------------------- mail2web - Check your email from the web at http://mail2web.com/ . -- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>