ceki 2004/05/26 10:19:38 Modified: tests/input/xml customLevel2.xml customLevel4.xml customLogger1.xml DOMTestCase1.xml customLevel3.xml customLevel1.xml customLogger2.xml customLogger3.xml fallback1.xml defaultInit.xml src/java/org/apache/log4j/xml/examples XMLSample.java src/java/org/apache/log4j/varia FallbackErrorHandler.java src/java/org/apache/log4j/net JMSSink.java UDPReceiver.java SimpleSocketServer.java tests/src/java/org/apache/log4j/xml DOMTestCase.java CustomLevelTestCase.java src/java/org/apache/log4j/joran/action AppenderRefAction.java RootLoggerAction.java src/java/org/apache/log4j/chainsaw LogUI.java tests/src/java/org/apache/log4j/varia ErrorHandlerTestCase.java tests/src/java/org/apache/log4j/helpers ReaderWriterLockTestCase.java VerifierThread.java src/java/org/apache/joran Interpreter.java src/java/org/apache/log4j/xml/test DOMTest.java tests/src/java/org/apache/log4j/customLogger XLoggerTestCase.java src/java/org/apache/log4j/joran JoranConfigurator.java Added: src/java/org/apache/log4j/joran/action PriorityAction.java Log:
- Moved most of log4j tests and internal code to use JoranConfigurator. JoranConfigrator has many more capabilities than DOMConfigurator. It can do everything DOMConfigurator can do with the exception of support for ErrorHanlder configruation. This is a very marginal point and will be dealt with in the futre. JoranConfigrator can read and correctly parse config files intended for DOMConfigurator. Unfortunately, any previous DOCTYPE reference to log4j.dtd must be removed. This is a small yet annoying problem. Revision Changes Path 1.2 +0 -1 logging-log4j/tests/input/xml/customLevel2.xml Index: customLevel2.xml =================================================================== RCS file: /home/cvs/logging-log4j/tests/input/xml/customLevel2.xml,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- customLevel2.xml 4 Apr 2002 22:01:25 -0000 1.1 +++ customLevel2.xml 26 May 2004 17:19:37 -0000 1.2 @@ -1,5 +1,4 @@ <?xml version="1.0" encoding="UTF-8" ?> -<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/' debug="false"> 1.2 +0 -1 logging-log4j/tests/input/xml/customLevel4.xml Index: customLevel4.xml =================================================================== RCS file: /home/cvs/logging-log4j/tests/input/xml/customLevel4.xml,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- customLevel4.xml 24 Mar 2002 23:41:56 -0000 1.1 +++ customLevel4.xml 26 May 2004 17:19:37 -0000 1.2 @@ -1,5 +1,4 @@ <?xml version="1.0" encoding="UTF-8" ?> -<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration debug="true" xmlns:log4j='http://jakarta.apache.org/log4j/'> 1.2 +0 -1 logging-log4j/tests/input/xml/customLogger1.xml Index: customLogger1.xml =================================================================== RCS file: /home/cvs/logging-log4j/tests/input/xml/customLogger1.xml,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- customLogger1.xml 22 Feb 2002 18:09:26 -0000 1.1 +++ customLogger1.xml 26 May 2004 17:19:37 -0000 1.2 @@ -1,5 +1,4 @@ <?xml version="1.0" encoding="UTF-8" ?> -<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/' debug="false"> 1.2 +0 -1 logging-log4j/tests/input/xml/DOMTestCase1.xml Index: DOMTestCase1.xml =================================================================== RCS file: /home/cvs/logging-log4j/tests/input/xml/DOMTestCase1.xml,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- DOMTestCase1.xml 18 Feb 2002 15:17:23 -0000 1.1 +++ DOMTestCase1.xml 26 May 2004 17:19:37 -0000 1.2 @@ -1,5 +1,4 @@ <?xml version="1.0" encoding="UTF-8" ?> -<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> <appender name="A1" class="org.apache.log4j.FileAppender"> 1.2 +0 -1 logging-log4j/tests/input/xml/customLevel3.xml Index: customLevel3.xml =================================================================== RCS file: /home/cvs/logging-log4j/tests/input/xml/customLevel3.xml,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- customLevel3.xml 4 Apr 2002 22:01:25 -0000 1.1 +++ customLevel3.xml 26 May 2004 17:19:37 -0000 1.2 @@ -1,5 +1,4 @@ <?xml version="1.0" encoding="UTF-8" ?> -<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/' debug="false"> 1.3 +1 -3 logging-log4j/tests/input/xml/customLevel1.xml Index: customLevel1.xml =================================================================== RCS file: /home/cvs/logging-log4j/tests/input/xml/customLevel1.xml,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- customLevel1.xml 18 Feb 2002 19:16:52 -0000 1.2 +++ customLevel1.xml 26 May 2004 17:19:37 -0000 1.3 @@ -1,5 +1,4 @@ <?xml version="1.0" encoding="UTF-8" ?> -<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'> @@ -7,8 +6,7 @@ <param name="Append" value="false" /> <param name="File" value="output/temp" /> <layout class="org.apache.log4j.PatternLayout"> - <param name="ConversionPattern" - value="%-5p %c{2} - %m\n"/> + <param name="ConversionPattern" value="%-5p %c{2} - %m\n"/> </layout> </appender> 1.2 +1 -1 logging-log4j/tests/input/xml/customLogger2.xml Index: customLogger2.xml =================================================================== RCS file: /home/cvs/logging-log4j/tests/input/xml/customLogger2.xml,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- customLogger2.xml 4 Apr 2002 22:01:25 -0000 1.1 +++ customLogger2.xml 26 May 2004 17:19:37 -0000 1.2 @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8" ?> -<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> + <log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/' debug="true"> 1.2 +0 -1 logging-log4j/tests/input/xml/customLogger3.xml Index: customLogger3.xml =================================================================== RCS file: /home/cvs/logging-log4j/tests/input/xml/customLogger3.xml,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- customLogger3.xml 4 Apr 2002 22:01:25 -0000 1.1 +++ customLogger3.xml 26 May 2004 17:19:37 -0000 1.2 @@ -1,5 +1,4 @@ <?xml version="1.0" encoding="UTF-8" ?> -<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/' debug="true"> 1.3 +1 -1 logging-log4j/tests/input/xml/fallback1.xml Index: fallback1.xml =================================================================== RCS file: /home/cvs/logging-log4j/tests/input/xml/fallback1.xml,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- fallback1.xml 9 Oct 2002 22:50:07 -0000 1.2 +++ fallback1.xml 26 May 2004 17:19:37 -0000 1.3 @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8" ?> -<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> + <log4j:configuration debug="true" xmlns:log4j="http://jakarta.apache.org/log4j/"> 1.3 +0 -1 logging-log4j/tests/input/xml/defaultInit.xml Index: defaultInit.xml =================================================================== RCS file: /home/cvs/logging-log4j/tests/input/xml/defaultInit.xml,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- defaultInit.xml 9 Oct 2002 22:50:07 -0000 1.2 +++ defaultInit.xml 26 May 2004 17:19:37 -0000 1.3 @@ -1,5 +1,4 @@ <?xml version="1.0" encoding="UTF-8" ?> -<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration debug="true" xmlns:log4j="http://jakarta.apache.org/log4j/"> 1.7 +6 -4 logging-log4j/src/java/org/apache/log4j/xml/examples/XMLSample.java Index: XMLSample.java =================================================================== RCS file: /home/cvs/logging-log4j/src/java/org/apache/log4j/xml/examples/XMLSample.java,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- XMLSample.java 19 May 2004 14:36:21 -0000 1.6 +++ XMLSample.java 26 May 2004 17:19:37 -0000 1.7 @@ -1,8 +1,8 @@ package org.apache.log4j.xml.examples; -import org.apache.log4j.xml.DOMConfigurator; -import org.apache.log4j.Category; +import org.apache.log4j.joran.JoranConfigurator; +import org.apache.log4j.LogManager; import org.apache.log4j.Logger; /** @@ -22,7 +22,7 @@ */ public class XMLSample { - static Category cat = Category.getInstance(XMLSample.class.getName()); + static Logger cat = Logger.getLogger(XMLSample.class.getName()); public static @@ -45,7 +45,9 @@ static void init(String configFile) { - DOMConfigurator.configure(configFile); + JoranConfigurator jc = new JoranConfigurator(); + jc.doConfigure(configFile, LogManager.getLoggerRepository()); + jc.logErrors(); } static 1.8 +64 -47 logging-log4j/src/java/org/apache/log4j/varia/FallbackErrorHandler.java Index: FallbackErrorHandler.java =================================================================== RCS file: /home/cvs/logging-log4j/src/java/org/apache/log4j/varia/FallbackErrorHandler.java,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- FallbackErrorHandler.java 18 Dec 2003 05:16:57 -0000 1.7 +++ FallbackErrorHandler.java 26 May 2004 17:19:37 -0000 1.8 @@ -1,20 +1,30 @@ /* - * Copyright (C) The Apache Software Foundation. All rights reserved. + * Copyright 1999,2004 The Apache Software Foundation. * - * 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. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. */ - + package org.apache.log4j.varia; -import org.apache.log4j.spi.ErrorHandler; -import org.apache.log4j.spi.LoggingEvent; -import org.apache.log4j.Appender; -import org.apache.log4j.Logger; -import org.apache.log4j.helpers.LogLog; +import org.apache.log4j.Appender; +import org.apache.log4j.Logger; +import org.apache.log4j.helpers.LogLog; +import org.apache.log4j.spi.ErrorHandler; +import org.apache.log4j.spi.LoggingEvent; + import java.util.Vector; - + + /** * * The <code>FallbackErrorHandler</code> implements the ErrorHandler @@ -29,26 +39,34 @@ * @author Milind Rao * */ public class FallbackErrorHandler implements ErrorHandler { - - Appender backup; Appender primary; Vector loggers; public FallbackErrorHandler() { } - + + + /** + * <em>Adds</em> the logger passed as parameter to the list of loggers that + * we need to search for in case of appender failure. + * @deprecated Use [EMAIL PROTECTED] #addLogger} instead. + */ + public void setLogger(Logger logger) { + addLogger(logger); + } /** - <em>Adds</em> the logger passed as parameter to the list of - loggers that we need to search for in case of appender failure. + <em>Adds</em> the logger passed as parameter to the list of + loggers that we need to search for in case of appender failure. */ - public - void setLogger(Logger logger) { + public void addLogger(Logger logger) { LogLog.debug("FB: Adding logger [" + logger.getName() + "]."); - if(loggers == null) { + + if (loggers == null) { loggers = new Vector(); } + loggers.addElement(logger); } @@ -56,16 +74,14 @@ /** No options to activate. */ - public - void activateOptions() { + public void activateOptions() { } /** Prints the message and the stack trace of the exception on <code>System.err</code>. */ - public - void error(String message, Exception e, int errorCode) { + public void error(String message, Exception e, int errorCode) { error(message, e, errorCode, null); } @@ -73,61 +89,62 @@ Prints the message and the stack trace of the exception on <code>System.err</code>. */ - public - void error(String message, Exception e, int errorCode, LoggingEvent event) { + public void error( + String message, Exception e, int errorCode, LoggingEvent event) { LogLog.debug("FB: The following error reported: " + message, e); LogLog.debug("FB: INITIATING FALLBACK PROCEDURE."); - for(int i = 0; i < loggers.size(); i++) { + + for (int i = 0; i < loggers.size(); i++) { Logger l = (Logger) loggers.elementAt(i); - LogLog.debug("FB: Searching for ["+primary.getName()+"] in logger [" - +l.getName() + "]."); + LogLog.debug( + "FB: Searching for [" + primary.getName() + "] in logger [" + + l.getName() + "]."); + //if(l.isAttached(primary)) { - LogLog.debug("FB: Replacing ["+primary.getName()+"] by [" - + backup.getName() + "] in logger ["+ l.getName() +"]."); + LogLog.debug( + "FB: Replacing [" + primary.getName() + "] by [" + backup.getName() + + "] in logger [" + l.getName() + "]."); l.removeAppender(primary); - LogLog.debug("FB: Adding appender ["+backup.getName()+"] to logger " - + l.getName()); + LogLog.debug( + "FB: Adding appender [" + backup.getName() + "] to logger " + + l.getName()); l.addAppender(backup); - } + } } /** Print a the error message passed as parameter on - <code>System.err</code>. + <code>System.err</code>. */ - public - void error(String message) { + public void error(String message) { //if(firstTime) { //LogLog.error(message); //firstTime = false; //} } - + /** - Return the backup appender. + Return the backup appender. */ - public - final Appender getBackupAppender() { - return backup; + public final Appender getBackupAppender() { + return backup; } /** The appender to which this error handler is attached. */ - public - void setAppender(Appender primary) { - LogLog.debug("FB: Setting primary appender to [" + primary.getName() + "]."); + public void setAppender(Appender primary) { + LogLog.debug( + "FB: Setting primary appender to [" + primary.getName() + "]."); this.primary = primary; } /** Set the backup appender. */ - public - void setBackupAppender(Appender backup) { + public void setBackupAppender(Appender backup) { LogLog.debug("FB: Setting backup appender to [" + backup.getName() + "]."); this.backup = backup; } - } 1.15 +3 -2 logging-log4j/src/java/org/apache/log4j/net/JMSSink.java Index: JMSSink.java =================================================================== RCS file: /home/cvs/logging-log4j/src/java/org/apache/log4j/net/JMSSink.java,v retrieving revision 1.14 retrieving revision 1.15 diff -u -r1.14 -r1.15 --- JMSSink.java 5 May 2003 20:42:56 -0000 1.14 +++ JMSSink.java 26 May 2004 17:19:37 -0000 1.15 @@ -7,10 +7,11 @@ package org.apache.log4j.net; +import org.apache.log4j.joran.JoranConfigurator; import org.apache.log4j.spi.LoggingEvent; import org.apache.log4j.Logger; import org.apache.log4j.PropertyConfigurator; -import org.apache.log4j.xml.DOMConfigurator; + import javax.jms.TopicConnection; @@ -55,7 +56,7 @@ String configFile = args[4]; if(configFile.endsWith(".xml")) { - DOMConfigurator.configure(configFile); + JoranConfigurator.configure(configFile); } else { PropertyConfigurator.configure(configFile); } 1.6 +32 -26 logging-log4j/src/java/org/apache/log4j/net/UDPReceiver.java Index: UDPReceiver.java =================================================================== RCS file: /home/cvs/logging-log4j/src/java/org/apache/log4j/net/UDPReceiver.java,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- UDPReceiver.java 14 Apr 2004 05:38:12 -0000 1.5 +++ UDPReceiver.java 26 May 2004 17:19:37 -0000 1.6 @@ -47,7 +47,7 @@ private String decoder = "org.apache.log4j.xml.XMLDecoder"; private Decoder decoderImpl; protected boolean paused; - private boolean isActive = false; + private boolean closed = false; private int port; private DatagramSocket socket; UDPHandlerThread handlerThread; @@ -61,15 +61,15 @@ } /** - The <b>Encoding</b> option specifies how the bytes are encoded. If this option is not specified, - the system encoding will be used. - */ + * The <b>Encoding</b> option specifies how the bytes are encoded. If this + * option is not specified, the system encoding will be used. + * */ public void setEncoding(String encoding) { this.encoding = encoding; } /** - Returns value of the <b>Encoding</b> option. + * Returns value of the <b>Encoding</b> option. */ public String getEncoding() { return encoding; @@ -92,17 +92,24 @@ } public synchronized void shutdown() { - isActive = false; - handlerThread.interrupt(); - receiverThread.interrupt(); + closed = true; + try { + if(handlerThread != null) { + handlerThread.join(); + } + if(receiverThread != null) { + receiverThread.join(); + } + } catch(InterruptedException ie) { + } socket.close(); } /** Returns true if this receiver is active. */ - public synchronized boolean isActive() { - return isActive; - } +// public synchronized boolean isActive() { +// return isActive; +//} public void activateOptions() { try { @@ -121,7 +128,6 @@ } try { - isActive = true; socket = new DatagramSocket(port); receiverThread = new UDPReceiverThread(); receiverThread.start(); @@ -145,11 +151,18 @@ list.notify(); } } + + /** + * Allow the UDPHandlerThread to wakeup and exit gracefully. + */ + void close() { + list.notify(); + } public void run() { ArrayList list2 = new ArrayList(); - while (isAlive() && isActive()) { + while (!UDPReceiver.this.closed) { synchronized (list) { try { while (list.size() == 0) { @@ -191,28 +204,21 @@ } catch (InterruptedException ie) { } } - } - - if (!isActive()) { - LogLog.debug( - UDPReceiver.this.getName() - + "'s handler thread is exiting because of shutdown"); - } - } - } + } // while + LogLog.debug(UDPReceiver.this.getName()+ "'s handler thread is exiting"); + } // run + } // UDPHandlerThread class UDPReceiverThread extends Thread { public UDPReceiverThread() { setDaemon(true); } - + public void run() { - active = true; - byte[] b = new byte[PACKET_LENGTH]; DatagramPacket p = new DatagramPacket(b, b.length); - while (isActive()) { + while (!UDPReceiver.this.closed) { try { socket.receive(p); 1.7 +3 -2 logging-log4j/src/java/org/apache/log4j/net/SimpleSocketServer.java Index: SimpleSocketServer.java =================================================================== RCS file: /home/cvs/logging-log4j/src/java/org/apache/log4j/net/SimpleSocketServer.java,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- SimpleSocketServer.java 5 May 2003 20:42:56 -0000 1.6 +++ SimpleSocketServer.java 26 May 2004 17:19:37 -0000 1.7 @@ -13,7 +13,7 @@ import org.apache.log4j.Category; import org.apache.log4j.LogManager; import org.apache.log4j.PropertyConfigurator; -import org.apache.log4j.xml.DOMConfigurator; +import org.apache.log4j.joran.JoranConfigurator; /** @@ -79,7 +79,8 @@ } if(configFile.endsWith(".xml")) { - DOMConfigurator.configure(configFile); + JoranConfigurator jc = new JoranConfigurator(); + jc.doConfigure(configFile, LogManager.getLoggerRepository()); } else { PropertyConfigurator.configure(configFile); } 1.9 +10 -2 logging-log4j/tests/src/java/org/apache/log4j/xml/DOMTestCase.java Index: DOMTestCase.java =================================================================== RCS file: /home/cvs/logging-log4j/tests/src/java/org/apache/log4j/xml/DOMTestCase.java,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- DOMTestCase.java 17 Sep 2003 17:02:52 -0000 1.8 +++ DOMTestCase.java 26 May 2004 17:19:37 -0000 1.9 @@ -5,8 +5,11 @@ import junit.framework.TestSuite; import junit.framework.Test; +import org.apache.log4j.LogManager; import org.apache.log4j.Logger; import org.apache.log4j.Level; +import org.apache.log4j.helpers.LogLog; +import org.apache.log4j.joran.JoranConfigurator; import org.apache.log4j.util.Filter; import org.apache.log4j.util.JunitTestRunnerFilter; import org.apache.log4j.util.LineNumberFilter; @@ -55,7 +58,10 @@ } public void test1() throws Exception { - DOMConfigurator.configure("input/xml/DOMTestCase1.xml"); + //org.apache.log4j.BasicConfigurator.configure(); + JoranConfigurator jc = new JoranConfigurator(); + jc.doConfigure("input/xml/DOMTestCase1.xml", LogManager.getLoggerRepository()); + LogLog.info(""+jc.getExecutionContext().getErrorList()); common(); ControlFilter cf1 = new ControlFilter(new String[]{TEST1_1A_PAT, TEST1_1B_PAT, @@ -65,7 +71,9 @@ EXCEPTION1, EXCEPTION2, EXCEPTION3}); Transformer.transform(TEMP_A1, FILTERED_A1, new Filter[] {cf1, - new LineNumberFilter(), new SunReflectFilter(), new JunitTestRunnerFilter()}); + new LineNumberFilter(), + new SunReflectFilter(), + new JunitTestRunnerFilter()}); Transformer.transform(TEMP_A2, FILTERED_A2, new Filter[] {cf2, new LineNumberFilter(), new ISO8601Filter(), 1.8 +22 -4 logging-log4j/tests/src/java/org/apache/log4j/xml/CustomLevelTestCase.java Index: CustomLevelTestCase.java =================================================================== RCS file: /home/cvs/logging-log4j/tests/src/java/org/apache/log4j/xml/CustomLevelTestCase.java,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- CustomLevelTestCase.java 27 Feb 2004 16:47:37 -0000 1.7 +++ CustomLevelTestCase.java 26 May 2004 17:19:37 -0000 1.8 @@ -21,6 +21,8 @@ import junit.framework.TestSuite; import org.apache.log4j.*; +import org.apache.log4j.helpers.LogLog; +import org.apache.log4j.joran.JoranConfigurator; import org.apache.log4j.util.Compare; @@ -48,25 +50,41 @@ } public void test1() throws Exception { - DOMConfigurator.configure("input/xml/customLevel1.xml"); + org.apache.log4j.BasicConfigurator.configure(); + JoranConfigurator jc = new JoranConfigurator(); + jc.doConfigure("input/xml/customLevel1.xml", LogManager.getLoggerRepository()); + LogLog.info(""+jc.getExecutionContext().getErrorList()); + + common(); assertTrue(Compare.compare(TEMP, "witness/customLevel.1")); } public void test2() throws Exception { - DOMConfigurator.configure("input/xml/customLevel2.xml"); + org.apache.log4j.BasicConfigurator.configure(); + JoranConfigurator jc = new JoranConfigurator(); + jc.doConfigure("input/xml/customLevel2.xml", LogManager.getLoggerRepository()); + LogLog.info(""+jc.getExecutionContext().getErrorList()); common(); assertTrue(Compare.compare(TEMP, "witness/customLevel.2")); } public void test3() throws Exception { - DOMConfigurator.configure("input/xml/customLevel3.xml"); + org.apache.log4j.BasicConfigurator.configure(); + JoranConfigurator jc = new JoranConfigurator(); + jc.doConfigure("input/xml/customLevel3.xml", LogManager.getLoggerRepository()); + LogLog.info(""+jc.getExecutionContext().getErrorList()); + common(); assertTrue(Compare.compare(TEMP, "witness/customLevel.3")); } public void test4() throws Exception { - DOMConfigurator.configure("input/xml/customLevel4.xml"); + org.apache.log4j.BasicConfigurator.configure(); + JoranConfigurator jc = new JoranConfigurator(); + jc.doConfigure("input/xml/customLevel4.xml", LogManager.getLoggerRepository()); + LogLog.info(""+jc.getExecutionContext().getErrorList()); + common(); assertTrue(Compare.compare(TEMP, "witness/customLevel.4")); } 1.10 +8 -7 logging-log4j/src/java/org/apache/log4j/joran/action/AppenderRefAction.java Index: AppenderRefAction.java =================================================================== RCS file: /home/cvs/logging-log4j/src/java/org/apache/log4j/joran/action/AppenderRefAction.java,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- AppenderRefAction.java 18 May 2004 16:50:42 -0000 1.9 +++ AppenderRefAction.java 26 May 2004 17:19:37 -0000 1.10 @@ -23,6 +23,7 @@ import org.apache.log4j.Appender; import org.apache.log4j.Logger; +import org.apache.log4j.helpers.LogLog; import org.apache.log4j.spi.AppenderAttachable; import org.xml.sax.Attributes; @@ -31,7 +32,7 @@ public class AppenderRefAction extends Action { - static final Logger logger = Logger.getLogger(AppenderRefAction.class); + //static final Logger logger = Logger.getLogger(AppenderRefAction.class); boolean inError = false; @@ -40,7 +41,7 @@ // Let us forget about previous errors (in this object) inError = false; - logger.debug("begin called"); + //logger.debug("begin called"); Object o = ec.peekObject(); @@ -49,7 +50,7 @@ "Could not find an AppenderAttachable at the top of execution stack. Near <" + tagName + "> line " + getLineNumber(ec); - logger.warn(errMsg); + LogLog.warn(errMsg); inError = true; ec.addError(new ErrorItem(errMsg)); @@ -64,7 +65,7 @@ // print a meaningful error message and return String errMsg = "Missing appender ref attribute in <appender-ref> tag."; - logger.warn(errMsg); + LogLog.warn(errMsg); inError = true; ec.addError(new ErrorItem(errMsg)); @@ -76,7 +77,7 @@ Appender appender = (Appender) appenderBag.get(appenderName); if (appender == null) { - logger.warn("Could not find an appender named [" + appenderName + "]"); + LogLog.warn("Could not find an appender named [" + appenderName + "]"); inError = true; ec.addError(new ErrorItem("Could not find an appender named [" + appenderName + "]")); @@ -84,11 +85,11 @@ } if (appenderAttachable instanceof Logger) { - logger.debug( + LogLog.debug( "Attaching appender named [" + appenderName + "] to logger named [" + ((Logger) appenderAttachable).getName() + "]."); } else { - logger.debug( + LogLog.debug( "Attaching appender named [" + appenderName + "] to " + appenderAttachable); } 1.7 +8 -7 logging-log4j/src/java/org/apache/log4j/joran/action/RootLoggerAction.java Index: RootLoggerAction.java =================================================================== RCS file: /home/cvs/logging-log4j/src/java/org/apache/log4j/joran/action/RootLoggerAction.java,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- RootLoggerAction.java 18 May 2004 16:50:42 -0000 1.6 +++ RootLoggerAction.java 26 May 2004 17:19:37 -0000 1.7 @@ -20,6 +20,7 @@ import org.apache.joran.action.Action; import org.apache.log4j.Logger; +import org.apache.log4j.helpers.LogLog; import org.apache.log4j.spi.LoggerRepository; import org.xml.sax.Attributes; @@ -30,23 +31,23 @@ static final String ADDITIVITY_ATTR = "additivity"; static final String EMPTY_STR = ""; static final Class[] ONE_STRING_PARAM = new Class[] { String.class }; - Logger logger = Logger.getLogger(RootLoggerAction.class); + //Logger logger = Logger.getLogger(RootLoggerAction.class); Logger root; boolean inError = false; public void begin(ExecutionContext ec, String name, Attributes attributes) { inError = false; - logger.debug("In begin method"); + //logger.debug("In begin method"); LoggerRepository repository = (LoggerRepository) ec.getObject(0); root = repository.getRootLogger(); - logger.debug("Pushing root logger on stack"); + LogLog.debug("Pushing root logger on stack"); ec.pushObject(root); } public void end(ExecutionContext ec, String name) { - logger.debug("end() called."); + //logger.debug("end() called."); if (inError) { return; @@ -55,11 +56,11 @@ Object o = ec.peekObject(); if (o != root) { - logger.warn( + LogLog.warn( "The object on the top the of the stack is not the root logger"); - logger.warn("It is: "+o); + LogLog.warn("It is: "+o); } else { - logger.debug("Removing root logger from top of stack."); + LogLog.debug("Removing root logger from top of stack."); ec.popObject(); } } 1.1 logging-log4j/src/java/org/apache/log4j/joran/action/PriorityAction.java Index: PriorityAction.java =================================================================== package org.apache.log4j.joran.action; import org.apache.joran.ExecutionContext; import org.apache.log4j.helpers.LogLog; import org.xml.sax.Attributes; /** * This action allows us to warn users that the Priority element has been * deprecated but is still accepted. * * @author Ceki Gulcu */ public class PriorityAction extends LevelAction { public void begin(ExecutionContext ec, String name, Attributes attributes) { LogLog.warn("Priority element has been deprecated, please use <level> instead."); super.begin(ec, name, attributes); } } 1.97 +8 -4 logging-log4j/src/java/org/apache/log4j/chainsaw/LogUI.java Index: LogUI.java =================================================================== RCS file: /home/cvs/logging-log4j/src/java/org/apache/log4j/chainsaw/LogUI.java,v retrieving revision 1.96 retrieving revision 1.97 diff -u -r1.96 -r1.97 --- LogUI.java 19 May 2004 13:15:41 -0000 1.96 +++ LogUI.java 26 May 2004 17:19:38 -0000 1.97 @@ -34,6 +34,7 @@ import org.apache.log4j.chainsaw.version.VersionManager; import org.apache.log4j.helpers.LogLog; import org.apache.log4j.helpers.OptionConverter; +import org.apache.log4j.joran.JoranConfigurator; import org.apache.log4j.net.SocketNodeEventListener; import org.apache.log4j.plugins.Plugin; import org.apache.log4j.plugins.PluginEvent; @@ -43,7 +44,7 @@ import org.apache.log4j.rule.ExpressionRule; import org.apache.log4j.rule.Rule; import org.apache.log4j.spi.LoggingEvent; -import org.apache.log4j.xml.DOMConfigurator; + import java.awt.BorderLayout; import java.awt.Component; @@ -71,6 +72,7 @@ import java.lang.reflect.Method; +import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; @@ -269,9 +271,11 @@ config = config.trim(); LogLog.info("Using '" + config + "' for auto-configuration"); try { - DOMConfigurator.configure(new URL(config)); - } catch (Exception e) { - LogLog.error("Failed to use the auto-configuration file", e); + JoranConfigurator jc = new JoranConfigurator(); + jc.doConfigure(new URL(config), LogManager.getLoggerRepository()); + jc.logErrors(); + } catch (MalformedURLException e) { + LogLog.error("Failed to use the auto-configuration file", e); } }else { LogLog.info("No auto-configuration file found within the ApplicationPreferenceModel"); 1.7 +2 -2 logging-log4j/tests/src/java/org/apache/log4j/varia/ErrorHandlerTestCase.java Index: ErrorHandlerTestCase.java =================================================================== RCS file: /home/cvs/logging-log4j/tests/src/java/org/apache/log4j/varia/ErrorHandlerTestCase.java,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- ErrorHandlerTestCase.java 3 May 2004 07:40:45 -0000 1.6 +++ ErrorHandlerTestCase.java 26 May 2004 17:19:38 -0000 1.7 @@ -29,7 +29,7 @@ import org.apache.log4j.util.LineNumberFilter; import org.apache.log4j.util.SunReflectFilter; import org.apache.log4j.util.Transformer; -import org.apache.log4j.xml.DOMConfigurator; +import org.apache.log4j.xml.DOMConfiguratorOld; public class ErrorHandlerTestCase extends TestCase { @@ -60,7 +60,7 @@ } public void test1() throws Exception { - DOMConfigurator.configure("input/xml/fallback1.xml"); + DOMConfiguratorOld.configure("input/xml/fallback1.xml"); common(); ControlFilter cf = 1.6 +7 -3 logging-log4j/tests/src/java/org/apache/log4j/helpers/ReaderWriterLockTestCase.java Index: ReaderWriterLockTestCase.java =================================================================== RCS file: /home/cvs/logging-log4j/tests/src/java/org/apache/log4j/helpers/ReaderWriterLockTestCase.java,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- ReaderWriterLockTestCase.java 27 Feb 2004 16:47:36 -0000 1.5 +++ ReaderWriterLockTestCase.java 26 May 2004 17:19:38 -0000 1.6 @@ -97,13 +97,17 @@ threads[i].start(); } + // It's better to wait for the writer to finish first for (int i = 0; i < (NUM_WRITERS + NUM_READERS); i++) { try { threads[i].join(); } catch (InterruptedException e) { } } - + + // let the verifier thread close + vt.closed = true; + Exception e = vt.getException(); if (e != null) { @@ -145,7 +149,7 @@ printMessage("In run()"); for (int t = 0; t < RLOOP; t++) { - if (vt.getInterrupt()) { + if (vt.isClosed()) { return; } @@ -177,7 +181,7 @@ printMessage("In run"); for (int t = 0; t < WLOOP; t++) { - if (vt.getInterrupt()) { + if (vt.isClosed()) { return; } 1.5 +17 -9 logging-log4j/tests/src/java/org/apache/log4j/helpers/VerifierThread.java Index: VerifierThread.java =================================================================== RCS file: /home/cvs/logging-log4j/tests/src/java/org/apache/log4j/helpers/VerifierThread.java,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- VerifierThread.java 27 Feb 2004 16:47:36 -0000 1.4 +++ VerifierThread.java 26 May 2004 17:19:38 -0000 1.5 @@ -19,14 +19,18 @@ import org.apache.oro.text.perl.Perl5Util; import java.io.BufferedReader; +import java.io.IOException; /** - * + * This thread knows about the number of reader and writer threads and keeps + * track of their operations. + * * @author Ceki Gülcü * */ class VerifierThread extends Thread { int writeLockHolder = -1; + boolean[] readLockHolders; boolean[] readLockWaiters; boolean[] writerLockWaiters; @@ -35,7 +39,7 @@ double v2 = 0; Perl5Util regex; Exception exception; - boolean interrupt; + boolean closed; VerifierThread(BufferedReader br, int numberOfReaders, int numberOfWriters) { bufferedReader = br; @@ -45,18 +49,18 @@ regex = new Perl5Util(); } - boolean getInterrupt() { - return interrupt; + boolean isClosed() { + return closed; } public void run() { System.out.println("In run of VerifThread"); String line = null; - - while (true) { + + while (!closed) { try { line = bufferedReader.readLine(); - if(!interrupt) { + if(!closed) { System.out.println(line); } if (regex.match("/([RW])-(\\d{1,3}) (.*)/", line)) { @@ -74,12 +78,16 @@ System.out.println( "[" + line + "] does not match expected pattern."); } - } catch (Exception e) { + } catch(IOException ioe) { + System.err.println("IOException occured."); + ioe.printStackTrace(System.err); + }catch (Exception e) { if(exception == null) { exception = e; } - interrupt = true; + closed = true; System.out.println("====Offending line ["+line+"]."); + e.printStackTrace(System.out); } } } 1.10 +15 -14 logging-log4j/src/java/org/apache/joran/Interpreter.java Index: Interpreter.java =================================================================== RCS file: /home/cvs/logging-log4j/src/java/org/apache/joran/Interpreter.java,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- Interpreter.java 12 May 2004 15:39:04 -0000 1.9 +++ Interpreter.java 26 May 2004 17:19:38 -0000 1.10 @@ -18,8 +18,8 @@ import org.apache.joran.action.*; -import org.apache.log4j.Logger; -import org.apache.log4j.helpers.LogLog; +//import org.apache.log4j.Logger; +//mport org.apache.log4j.helpers.LogLog; import org.xml.sax.Attributes; import org.xml.sax.Locator; @@ -64,7 +64,7 @@ * */ public class Interpreter extends DefaultHandler { - static final Logger logger = Logger.getLogger(Interpreter.class); + //static final Logger logger = Logger.getLogger(Interpreter.class); private static List EMPTY_LIST = new Vector(0); private RuleStore ruleStore; private ExecutionContext ec; @@ -104,7 +104,7 @@ String tagName = getTagName(localName, qName); - logger.debug("in startElement <" + tagName + ">"); + //logger.debug("in startElement <" + tagName + ">"); pattern.push(tagName); @@ -119,7 +119,7 @@ String errMsg = "no applicable action for <" + tagName + ">, current pattern is [" + pattern+"]"; - logger.debug(errMsg); + //LogLog.error(errMsg); ec.addError(new ErrorItem(errMsg)); } } @@ -241,23 +241,23 @@ public void error(SAXParseException spe) throws SAXException { ec.addError(new ErrorItem("Parsing error", spe)); - LogLog.error( - "Parsing problem on line " + spe.getLineNumber() + " and column " - + spe.getColumnNumber()); + //LogLog.error( + //"Parsing problem on line " + spe.getLineNumber() + " and column " + //+ spe.getColumnNumber()); } public void fatalError(SAXParseException spe) throws SAXException { ec.addError(new ErrorItem("Parsing fatal error", spe)); - LogLog.error( - "Parsing problem on line " + spe.getLineNumber() + " and column " - + spe.getColumnNumber()); +// LogLog.error( +// "Parsing problem on line " + spe.getLineNumber() + " and column " +// + spe.getColumnNumber()); } public void warning(SAXParseException spe) throws SAXException { ec.addError(new ErrorItem("Parsing warning", spe)); - LogLog.warn( - "Parsing problem on line " + spe.getLineNumber() + " and column " - + spe.getColumnNumber()); +// LogLog.warn( +// "Parsing problem on line " + spe.getLineNumber() + " and column " +// + spe.getColumnNumber()); } public void endPrefixMapping(java.lang.String prefix) { @@ -276,4 +276,5 @@ public void startPrefixMapping( java.lang.String prefix, java.lang.String uri) { } + } 1.10 +4 -2 logging-log4j/src/java/org/apache/log4j/xml/test/DOMTest.java Index: DOMTest.java =================================================================== RCS file: /home/cvs/logging-log4j/src/java/org/apache/log4j/xml/test/DOMTest.java,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- DOMTest.java 19 May 2004 14:36:22 -0000 1.9 +++ DOMTest.java 26 May 2004 17:19:38 -0000 1.10 @@ -20,7 +20,7 @@ import org.apache.log4j.Level; import org.apache.log4j.LogManager; import org.apache.log4j.Logger; -import org.apache.log4j.xml.DOMConfigurator; +import org.apache.log4j.joran.JoranConfigurator; //import org.apache.log4j.xml.examples.ReportParserError; @@ -52,7 +52,9 @@ } static void init(String configFile) { - DOMConfigurator.configure(configFile); + JoranConfigurator jc = new JoranConfigurator(); + jc.doConfigure(configFile, LogManager.getLoggerRepository()); + jc.logErrors(); } static void test() { 1.6 +5 -3 logging-log4j/tests/src/java/org/apache/log4j/customLogger/XLoggerTestCase.java Index: XLoggerTestCase.java =================================================================== RCS file: /home/cvs/logging-log4j/tests/src/java/org/apache/log4j/customLogger/XLoggerTestCase.java,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- XLoggerTestCase.java 21 Apr 2004 09:45:10 -0000 1.5 +++ XLoggerTestCase.java 26 May 2004 17:19:38 -0000 1.6 @@ -20,10 +20,10 @@ import junit.framework.TestCase; import junit.framework.TestSuite; +import org.apache.log4j.LogManager; import org.apache.log4j.Logger; +import org.apache.log4j.joran.JoranConfigurator; import org.apache.log4j.util.*; -import org.apache.log4j.xml.DOMConfigurator; - /** Tests handling of custom loggers. @@ -51,7 +51,9 @@ } void common(int number) throws Exception { - DOMConfigurator.configure("input/xml/customLogger" + number + ".xml"); + JoranConfigurator jc = new JoranConfigurator(); + jc.doConfigure("input/xml/customLogger" + number + ".xml", LogManager.getLoggerRepository()); + jc.logErrors(); int i = -1; Logger root = Logger.getRootLogger(); 1.10 +86 -28 logging-log4j/src/java/org/apache/log4j/joran/JoranConfigurator.java Index: JoranConfigurator.java =================================================================== RCS file: /home/cvs/logging-log4j/src/java/org/apache/log4j/joran/JoranConfigurator.java,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- JoranConfigurator.java 17 May 2004 16:58:30 -0000 1.9 +++ JoranConfigurator.java 26 May 2004 17:19:38 -0000 1.10 @@ -20,6 +20,7 @@ import java.io.InputStream; import java.net.URL; import java.util.HashMap; +import java.util.List; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; @@ -34,7 +35,9 @@ import org.apache.joran.action.NewRuleAction; import org.apache.joran.action.ParamAction; import org.apache.joran.helper.SimpleRuleStore; -import org.apache.log4j.helpers.LogLog; +import org.apache.log4j.LogManager; +import org.apache.log4j.Logger; +//import org.apache.log4j.helpers.LogLog; import org.apache.log4j.joran.action.ActionConst; import org.apache.log4j.joran.action.AppenderAction; import org.apache.log4j.joran.action.AppenderRefAction; @@ -44,6 +47,7 @@ import org.apache.log4j.joran.action.LevelAction; import org.apache.log4j.joran.action.LoggerAction; import org.apache.log4j.joran.action.PluginAction; +import org.apache.log4j.joran.action.PriorityAction; import org.apache.log4j.joran.action.RepositoryPropertyAction; import org.apache.log4j.joran.action.RootLoggerAction; import org.apache.log4j.joran.action.SubstitutionPropertyAction; @@ -61,12 +65,29 @@ */ public class JoranConfigurator implements Configurator { - Interpreter joranInterpreter; + Interpreter joranInterpreter; + LoggerRepository repository; + + // The logger will be retreived form the logger repository being + // configured + private Logger logger; + public JoranConfigurator() { selfInitialize(); } + /** + * + * + * @param filename + */ + //public static void configure(URL url) { + //xx JoranConfigurator jc = new JoranConfigurator(); + //jc.doConfigure(url, LogManager.getLoggerRepository()); + //} + + public void doConfigure(URL url, LoggerRepository repository) { ExecutionContext ec = joranInterpreter.getExecutionContext(); String errMsg; @@ -76,36 +97,73 @@ in.close(); } catch (IOException ioe) { errMsg = "Could not open [" + url + "]."; - LogLog.error(errMsg, ioe); + getLogger().error(errMsg, ioe); ec.addError(new ErrorItem(errMsg, ioe)); } } + //Use the instance from [EMAIL PROTECTED] #doConfigure(String, LoggingRepository)} instead + + /** + * + * + * @param filename + */ + public static void configure(String filename) { + JoranConfigurator jc = new JoranConfigurator(); + jc.doConfigure(filename, LogManager.getLoggerRepository()); + } /** * Configure a repository from a configuration file passed as parameter. */ public void doConfigure(String filename, LoggerRepository repository) { + this.repository = repository; FileInputStream fis = null; ExecutionContext ec = joranInterpreter.getExecutionContext(); - LogLog.info("in JoranConfigurator doConfigure "+filename); + getLogger().info("in JoranConfigurator doConfigure "+filename); try { fis = new FileInputStream(filename); doConfigure(fis, repository); } catch (IOException ioe) { String errMsg = "Could not open [" + filename + "]."; - LogLog.error(errMsg, ioe); + getLogger().error(errMsg, ioe); ec.addError(new ErrorItem(errMsg, ioe)); } finally { if (fis != null) { try { fis.close(); } catch (java.io.IOException e) { - LogLog.error("Could not close [" + filename + "].", e); + getLogger().error("Could not close [" + filename + "].", e); } } } } + + /** + * All doConfigure methods evenually call this form. + * */ + + public void doConfigure(InputStream in, LoggerRepository repository) { + this.repository = repository; + ExecutionContext ec = joranInterpreter.getExecutionContext(); + ec.pushObject(repository); + String errMsg; + try { + SAXParserFactory spf = SAXParserFactory.newInstance(); + SAXParser saxParser = spf.newSAXParser(); + saxParser.parse(in, joranInterpreter); + } catch (SAXException e) { + // all exceptions should have been recorded already. + } catch (ParserConfigurationException pce) { + errMsg = "Parser configuration error occured"; + getLogger().error(errMsg, pce); + ec.addError(new ErrorItem(errMsg, pce)); + } catch (IOException ie) { + errMsg = "I/O error occured while parsing xml file"; + ec.addError(new ErrorItem("Parser configuration error occured", ie)); + } + } protected void selfInitialize() { @@ -116,8 +174,10 @@ rs.addRule(new Pattern("log4j:configuration/plugin"), new PluginAction()); rs.addRule(new Pattern("log4j:configuration/logger"), new LoggerAction()); rs.addRule(new Pattern("log4j:configuration/logger/level"), new LevelAction()); + rs.addRule(new Pattern("log4j:configuration/logger/priority"), new PriorityAction()); rs.addRule(new Pattern("log4j:configuration/root"), new RootLoggerAction()); rs.addRule(new Pattern("log4j:configuration/root/level"), new LevelAction()); + rs.addRule(new Pattern("log4j:configuration/root/priority"), new PriorityAction()); rs.addRule(new Pattern("log4j:configuration/logger/appender-ref"), new AppenderRefAction()); rs.addRule(new Pattern("log4j:configuration/root/appender-ref"), new AppenderRefAction()); rs.addRule(new Pattern("log4j:configuration/appender"), new AppenderAction()); @@ -135,30 +195,28 @@ HashMap omap = ec.getObjectMap(); omap.put(ActionConst.APPENDER_BAG, new HashMap()); } - - - public void doConfigure(InputStream in, LoggerRepository repository) { - ExecutionContext ec = joranInterpreter.getExecutionContext(); - ec.pushObject(repository); - String errMsg; - - try { - SAXParserFactory spf = SAXParserFactory.newInstance(); - SAXParser saxParser = spf.newSAXParser(); - saxParser.parse(in, joranInterpreter); - } catch (SAXException e) { - // all exceptions should have been recorded already. - } catch (ParserConfigurationException pce) { - errMsg = "Parser configuration error occured"; - LogLog.error(errMsg, pce); - ec.addError(new ErrorItem(errMsg, pce)); - } catch (IOException ie) { - errMsg = "I/O error occured while parsing xml file"; - ec.addError(new ErrorItem("Parser configuration error occured", ie)); - } - } public ExecutionContext getExecutionContext() { return joranInterpreter.getExecutionContext(); } + + public void logErrors() { + List errorList = getExecutionContext().getErrorList(); + if(errorList.size() == 0) { + return; + } + getLogger().warn("Errors occured while parsing the XML configuration file"); + for(int i = 0; i < errorList.size(); i++) { + getLogger().warn(""+errorList.get(i)); + } + } + + Logger getLogger() { + if(logger == null) { + logger = repository.getLogger(JoranConfigurator.class.getName()); + } + return logger; + } + } + --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]