You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4j-dev@logging.apache.org by ca...@apache.org on 2007/04/26 07:16:05 UTC
svn commit: r532611 - in /logging/sandbox/log4j/component/src:
main/java/org/apache/log4j/ main/java/org/apache/log4j/plugins/
main/java/org/apache/log4j/xml/ main/resources/org/
main/resources/org/apache/ main/resources/org/apache/log4j/ main/resource...
Author: carnold
Date: Wed Apr 25 22:16:04 2007
New Revision: 532611
URL: http://svn.apache.org/viewvc?view=rev&rev=532611
Log:
Bug 42094: Refactor to use UnrecognizedElementHandler, o.a.l.xml.PluginConfigurator moved to o.a.l.plugins
Added:
logging/sandbox/log4j/component/src/main/java/org/apache/log4j/plugins/PluginConfigurator.java
- copied, changed from r532603, logging/log4j/branches/v1_2-branch/src/java/org/apache/log4j/xml/DOMConfigurator.java
logging/sandbox/log4j/component/src/main/java/org/apache/log4j/xml/UnrecognizedElementHandler.java
- copied unchanged from r532603, logging/log4j/branches/v1_2-branch/src/java/org/apache/log4j/xml/UnrecognizedElementHandler.java
logging/sandbox/log4j/component/src/main/resources/org/
logging/sandbox/log4j/component/src/main/resources/org/apache/
logging/sandbox/log4j/component/src/main/resources/org/apache/log4j/
logging/sandbox/log4j/component/src/main/resources/org/apache/log4j/plugins/
logging/sandbox/log4j/component/src/main/resources/org/apache/log4j/plugins/log4j.dtd
- copied unchanged from r532605, logging/log4j/branches/v1_2-branch/src/java/org/apache/log4j/xml/log4j.dtd
logging/sandbox/log4j/component/src/test/java/org/apache/log4j/plugins/MockReceiver.java
- copied, changed from r532603, logging/sandbox/log4j/component/src/test/java/org/apache/log4j/xml/MockReceiver.java
logging/sandbox/log4j/component/src/test/java/org/apache/log4j/plugins/PluginConfiguratorTest.java
- copied, changed from r532603, logging/sandbox/log4j/component/src/test/java/org/apache/log4j/xml/PluginConfiguratorTest.java
logging/sandbox/log4j/component/src/test/resources/org/apache/log4j/plugins/plugins1.xml
- copied, changed from r532603, logging/sandbox/log4j/component/src/test/resources/org/apache/log4j/xml/plugins1.xml
Removed:
logging/sandbox/log4j/component/src/main/java/org/apache/log4j/xml/PluginConfigurator.java
logging/sandbox/log4j/component/src/test/java/org/apache/log4j/xml/MockReceiver.java
logging/sandbox/log4j/component/src/test/java/org/apache/log4j/xml/PluginConfiguratorTest.java
logging/sandbox/log4j/component/src/test/resources/org/apache/log4j/xml/plugins1.xml
Modified:
logging/sandbox/log4j/component/src/main/java/org/apache/log4j/LoggerRepositoryExImpl.java
Modified: logging/sandbox/log4j/component/src/main/java/org/apache/log4j/LoggerRepositoryExImpl.java
URL: http://svn.apache.org/viewvc/logging/sandbox/log4j/component/src/main/java/org/apache/log4j/LoggerRepositoryExImpl.java?view=diff&rev=532611&r1=532610&r2=532611
==============================================================================
--- logging/sandbox/log4j/component/src/main/java/org/apache/log4j/LoggerRepositoryExImpl.java (original)
+++ logging/sandbox/log4j/component/src/main/java/org/apache/log4j/LoggerRepositoryExImpl.java Wed Apr 25 22:16:04 2007
@@ -20,6 +20,8 @@
import org.apache.log4j.helpers.LogLog;
import org.apache.log4j.or.ObjectRenderer;
import org.apache.log4j.or.RendererMap;
+import org.apache.log4j.plugins.Plugin;
+import org.apache.log4j.plugins.PluginConfigurator;
import org.apache.log4j.plugins.PluginRegistry;
import org.apache.log4j.scheduler.Scheduler;
import org.apache.log4j.spi.ErrorItem;
@@ -29,7 +31,10 @@
import org.apache.log4j.spi.LoggerRepository;
import org.apache.log4j.spi.LoggerRepositoryEventListener;
import org.apache.log4j.spi.LoggerRepositoryEx;
+import org.apache.log4j.spi.OptionHandler;
import org.apache.log4j.spi.RendererSupport;
+import org.apache.log4j.xml.UnrecognizedElementHandler;
+import org.w3c.dom.Element;
import java.util.ArrayList;
import java.util.Enumeration;
@@ -37,6 +42,7 @@
import java.util.Hashtable;
import java.util.List;
import java.util.Map;
+import java.util.Properties;
import java.util.Vector;
@@ -46,7 +52,9 @@
* and implementing the newly added capabilities.
*/
public final class LoggerRepositoryExImpl
- implements LoggerRepositoryEx, RendererSupport {
+ implements LoggerRepositoryEx,
+ RendererSupport,
+ UnrecognizedElementHandler {
/**
* Wrapped logger repository.
@@ -579,6 +587,32 @@
public LoggerFactory getLoggerFactory() {
return loggerFactory;
}
+
+ /** {@inheritDoc} */
+ public boolean parseUnrecognizedElement(
+ final Element element,
+ final Properties props) throws Exception {
+ if ("plugin".equals(element.getNodeName())) {
+ OptionHandler instance =
+ PluginConfigurator.parseElement(element, props, Plugin.class);
+ if (instance instanceof Plugin) {
+ Plugin plugin = (Plugin) instance;
+ String pluginName = PluginConfigurator.subst(element.getAttribute("name"), props);
+ if (pluginName.length() > 0) {
+ plugin.setName(pluginName);
+ }
+ getPluginRegistry().addPlugin(plugin);
+ plugin.setLoggerRepository(this);
+
+ LogLog.debug("Pushing plugin on to the object stack.");
+ instance.activateOptions();
+ return true;
+ }
+ }
+ return false;
+ }
+
+
/**
* Implementation of RendererSupportImpl if not
Copied: logging/sandbox/log4j/component/src/main/java/org/apache/log4j/plugins/PluginConfigurator.java (from r532603, logging/log4j/branches/v1_2-branch/src/java/org/apache/log4j/xml/DOMConfigurator.java)
URL: http://svn.apache.org/viewvc/logging/sandbox/log4j/component/src/main/java/org/apache/log4j/plugins/PluginConfigurator.java?view=diff&rev=532611&p1=logging/log4j/branches/v1_2-branch/src/java/org/apache/log4j/xml/DOMConfigurator.java&r1=532603&p2=logging/sandbox/log4j/component/src/main/java/org/apache/log4j/plugins/PluginConfigurator.java&r2=532611
==============================================================================
--- logging/log4j/branches/v1_2-branch/src/java/org/apache/log4j/xml/DOMConfigurator.java (original)
+++ logging/sandbox/log4j/component/src/main/java/org/apache/log4j/plugins/PluginConfigurator.java Wed Apr 25 22:16:04 2007
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.log4j.xml;
+package org.apache.log4j.plugins;
import org.apache.log4j.Appender;
import org.apache.log4j.Layout;
@@ -37,11 +37,15 @@
import org.apache.log4j.spi.LoggerRepository;
import org.apache.log4j.spi.OptionHandler;
import org.apache.log4j.spi.RendererSupport;
+import org.apache.log4j.xml.DOMConfigurator;
+import org.apache.log4j.xml.SAXErrorHandler;
+import org.apache.log4j.xml.UnrecognizedElementHandler;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
+import org.xml.sax.EntityResolver;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
@@ -57,34 +61,13 @@
import java.util.Hashtable;
import java.util.Properties;
-// Contributors: Mark Womack
-// Arun Katkere
-
/**
- Use this class to initialize the log4j environment using a DOM tree.
-
- <p>The DTD is specified in <a
- href="log4j.dtd"><b>log4j.dtd</b></a>.
-
- <p>Sometimes it is useful to see how log4j is reading configuration
- files. You can enable log4j internal logging by defining the
- <b>log4j.debug</b> variable on the java command
- line. Alternatively, set the <code>debug</code> attribute in the
- <code>log4j:configuration</code> element. As in
-<pre>
- <log4j:configuration <b>debug="true"</b> xmlns:log4j="http://jakarta.apache.org/log4j/">
- ...
- </log4j:configuration>
-</pre>
-
- <p>There are sample XML files included in the package.
-
- @author Christopher Taylor
- @author Ceki Gülcü
- @author Anders Kristensen
-
- @since 0.8.3 */
-public class DOMConfigurator implements Configurator {
+ * This is a duplicate (with minor modifications)
+ * of the log4j 1.2.15 DOMConfigurator
+ * renamed for use with earlier versions of log4j.
+ *
+*/
+public class PluginConfigurator implements Configurator {
static final String CONFIGURATION_TAG = "log4j:configuration";
static final String OLD_CONFIGURATION_TAG = "configuration";
@@ -122,18 +105,18 @@
// key: appenderName, value: appender
- Hashtable appenderBag;
+ private Hashtable appenderBag;
- Properties props;
- LoggerRepository repository;
+ private Properties props;
+ private LoggerRepository repository;
- protected LoggerFactory catFactory = null;
+ private LoggerFactory catFactory = null;
/**
No argument constructor.
*/
public
- DOMConfigurator () {
+ PluginConfigurator () {
appenderBag = new Hashtable();
}
@@ -957,6 +940,7 @@
propSetter.setProperty(name, value);
}
+
/**
* Creates an OptionHandler and processes any nested param elements
* but does not call activateOptions. If the class also supports
@@ -1001,21 +985,50 @@
return null;
}
-}
+ private static class XMLWatchdog extends FileWatchdog {
+ XMLWatchdog(String filename) {
+ super(filename);
+ }
-class XMLWatchdog extends FileWatchdog {
+ /**
+ Call {@link PropertyConfigurator#configure(String)} with the
+ <code>filename</code> to reconfigure log4j. */
+ public
+ void doOnChange() {
+ new PluginConfigurator().doConfigure(filename,
+ LogManager.getLoggerRepository());
+ }
+ }
+
+
+ /**
+ * An {@link EntityResolver} specifically designed to return
+ * <code>log4j.dtd</code> which is embedded within the log4j jar
+ * file.
+ *
+ * @author Paul Austin
+ * */
+ private static class Log4jEntityResolver implements EntityResolver {
+
+ public InputSource resolveEntity (String publicId, String systemId) {
+ if (systemId.endsWith("log4j.dtd")) {
+ Class clazz = getClass();
+ InputStream in = Log4jEntityResolver.class.getResourceAsStream("log4j.dtd");
+ if (in == null) {
+ LogLog.error("Could not find [log4j.dtd]. Used [" + clazz.getClassLoader()
+ + "] class loader in the search.");
+ return null;
+ } else {
+ return new InputSource(in);
+ }
+ } else {
+ return null;
+ }
+ }
+ }
- XMLWatchdog(String filename) {
- super(filename);
- }
- /**
- Call {@link PropertyConfigurator#configure(String)} with the
- <code>filename</code> to reconfigure log4j. */
- public
- void doOnChange() {
- new DOMConfigurator().doConfigure(filename,
- LogManager.getLoggerRepository());
- }
}
+
+
Copied: logging/sandbox/log4j/component/src/test/java/org/apache/log4j/plugins/MockReceiver.java (from r532603, logging/sandbox/log4j/component/src/test/java/org/apache/log4j/xml/MockReceiver.java)
URL: http://svn.apache.org/viewvc/logging/sandbox/log4j/component/src/test/java/org/apache/log4j/plugins/MockReceiver.java?view=diff&rev=532611&p1=logging/sandbox/log4j/component/src/test/java/org/apache/log4j/xml/MockReceiver.java&r1=532603&p2=logging/sandbox/log4j/component/src/test/java/org/apache/log4j/plugins/MockReceiver.java&r2=532611
==============================================================================
--- logging/sandbox/log4j/component/src/test/java/org/apache/log4j/xml/MockReceiver.java (original)
+++ logging/sandbox/log4j/component/src/test/java/org/apache/log4j/plugins/MockReceiver.java Wed Apr 25 22:16:04 2007
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.log4j.xml;
+package org.apache.log4j.plugins;
import org.apache.log4j.plugins.PluginSkeleton;
Copied: logging/sandbox/log4j/component/src/test/java/org/apache/log4j/plugins/PluginConfiguratorTest.java (from r532603, logging/sandbox/log4j/component/src/test/java/org/apache/log4j/xml/PluginConfiguratorTest.java)
URL: http://svn.apache.org/viewvc/logging/sandbox/log4j/component/src/test/java/org/apache/log4j/plugins/PluginConfiguratorTest.java?view=diff&rev=532611&p1=logging/sandbox/log4j/component/src/test/java/org/apache/log4j/xml/PluginConfiguratorTest.java&r1=532603&p2=logging/sandbox/log4j/component/src/test/java/org/apache/log4j/plugins/PluginConfiguratorTest.java&r2=532611
==============================================================================
--- logging/sandbox/log4j/component/src/test/java/org/apache/log4j/xml/PluginConfiguratorTest.java (original)
+++ logging/sandbox/log4j/component/src/test/java/org/apache/log4j/plugins/PluginConfiguratorTest.java Wed Apr 25 22:16:04 2007
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.log4j.xml;
+package org.apache.log4j.plugins;
import junit.framework.TestCase;
import org.apache.log4j.LogManager;
Copied: logging/sandbox/log4j/component/src/test/resources/org/apache/log4j/plugins/plugins1.xml (from r532603, logging/sandbox/log4j/component/src/test/resources/org/apache/log4j/xml/plugins1.xml)
URL: http://svn.apache.org/viewvc/logging/sandbox/log4j/component/src/test/resources/org/apache/log4j/plugins/plugins1.xml?view=diff&rev=532611&p1=logging/sandbox/log4j/component/src/test/resources/org/apache/log4j/xml/plugins1.xml&r1=532603&p2=logging/sandbox/log4j/component/src/test/resources/org/apache/log4j/plugins/plugins1.xml&r2=532611
==============================================================================
--- logging/sandbox/log4j/component/src/test/resources/org/apache/log4j/xml/plugins1.xml (original)
+++ logging/sandbox/log4j/component/src/test/resources/org/apache/log4j/plugins/plugins1.xml Wed Apr 25 22:16:04 2007
@@ -15,9 +15,9 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-<!DOCTYPE log4j:configuration >
+<!DOCTYPE log4j:configuration SYSTEM 'http://logging.apache.org/log4j/log4j.dtd'>
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="true">
- <plugin name="mock1" class="org.apache.log4j.xml.MockReceiver">
+ <plugin name="mock1" class="org.apache.log4j.plugins.MockReceiver">
<param name="Port" value="4560"/>
<param name="Host" value="127.0.0.1" />
</plugin>
---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-dev-unsubscribe@logging.apache.org
For additional commands, e-mail: log4j-dev-help@logging.apache.org