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>
-   &lt;log4j:configuration <b>debug="true"</b> xmlns:log4j="http://jakarta.apache.org/log4j/">
-   ...
-   &lt;/log4j:configuration>
-</pre>
-
-   <p>There are sample XML files included in the package.
-   
-   @author Christopher Taylor
-   @author Ceki G&uuml;lc&uuml;
-   @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