You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by rg...@apache.org on 2012/10/20 06:47:33 UTC

svn commit: r1400365 - in /logging/log4j/log4j2/trunk: core/src/main/java/org/apache/logging/log4j/core/config/ core/src/test/java/org/apache/logging/log4j/core/config/ src/changes/

Author: rgoers
Date: Sat Oct 20 04:47:32 2012
New Revision: 1400365

URL: http://svn.apache.org/viewvc?rev=1400365&view=rev
Log:
LOG4J2-55 - Added ability to configure from an InputSource.

Modified:
    logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/ConfigurationFactory.java
    logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/Configurator.java
    logging/log4j/log4j2/trunk/core/src/test/java/org/apache/logging/log4j/core/config/TestConfigurator.java
    logging/log4j/log4j2/trunk/src/changes/changes.xml

Modified: logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/ConfigurationFactory.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/ConfigurationFactory.java?rev=1400365&r1=1400364&r2=1400365&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/ConfigurationFactory.java (original)
+++ logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/ConfigurationFactory.java Sat Oct 20 04:47:32 2012
@@ -418,6 +418,26 @@ public abstract class ConfigurationFacto
 
         @Override
         public Configuration getConfiguration(InputSource source) {
+            if (source != null) {
+                String config = source.getSystemId() != null ? source.getSystemId() : source.getPublicId();
+                for (ConfigurationFactory factory : factories) {
+                    String[] types = factory.getSupportedTypes();
+                    if (types != null) {
+                        for (String type : types) {
+                            if (type.equals("*") || (config != null && config.endsWith(type))) {
+                                Configuration c = factory.getConfiguration(source);
+                                if (c != null) {
+                                    return c;
+                                } else {
+                                    LOGGER.error("Cannot determine the ConfigurationFactory to use for {}", config);
+                                    return null;
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+            LOGGER.error("Cannot process configuration, input source is null");
             return null;
         }
     }

Modified: logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/Configurator.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/Configurator.java?rev=1400365&r1=1400364&r2=1400365&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/Configurator.java (original)
+++ logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/Configurator.java Sat Oct 20 04:47:32 2012
@@ -18,6 +18,7 @@ package org.apache.logging.log4j.core.co
 
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.core.LoggerContext;
+import org.xml.sax.InputSource;
 
 import java.net.URI;
 import java.net.URISyntaxException;
@@ -68,6 +69,25 @@ public final class Configurator {
         return null;
     }
 
+    /**
+     * Initialize the Logging Context.
+     * @param loader The ClassLoader for the Context (or null).
+     * @param source The InputSource for the configuration.
+     * @return The LoggerContext.
+     */
+    public static LoggerContext initialize(ClassLoader loader, InputSource source) {
+
+        try {
+            LoggerContext ctx = (LoggerContext) LogManager.getContext(loader, false);
+            Configuration config = ConfigurationFactory.getInstance().getConfiguration(source);
+            ctx.setConfiguration(config);
+            return ctx;
+        } catch (Exception ex) {
+            ex.printStackTrace();
+        }
+        return null;
+    }
+
     public static void shutdown(LoggerContext ctx) {
         if (ctx != null) {
             ctx.setConfiguration(new DefaultConfiguration());

Modified: logging/log4j/log4j2/trunk/core/src/test/java/org/apache/logging/log4j/core/config/TestConfigurator.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/core/src/test/java/org/apache/logging/log4j/core/config/TestConfigurator.java?rev=1400365&r1=1400364&r2=1400365&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/core/src/test/java/org/apache/logging/log4j/core/config/TestConfigurator.java (original)
+++ logging/log4j/log4j2/trunk/core/src/test/java/org/apache/logging/log4j/core/config/TestConfigurator.java Sat Oct 20 04:47:32 2012
@@ -23,8 +23,11 @@ import org.apache.logging.log4j.core.Log
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
+import org.xml.sax.InputSource;
 
 import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
 import java.util.Map;
 
 import static org.junit.Assert.assertTrue;
@@ -57,6 +60,45 @@ public class TestConfigurator {
     }
 
     @Test
+    public void testFromStream() throws Exception {
+        InputStream is = new FileInputStream("target/test-classes/log4j2-config.xml");
+        InputSource source = new InputSource(is);
+        source.setSystemId("target/test-classes/log4j2-config.xml");
+        LoggerContext ctx = Configurator.initialize(null, source);
+        Logger logger = LogManager.getLogger("org.apache.test.TestConfigurator");
+        Configuration config = ctx.getConfiguration();
+        assertNotNull("No configuration", config);
+        assertTrue("Incorrect Configuration. Expected " + CONFIG_NAME + " but found " + config.getName(),
+            CONFIG_NAME.equals(config.getName()));
+        Map<String, Appender> map = config.getAppenders();
+        assertNotNull("No Appenders", map != null && map.size() > 0);
+        assertTrue("Wrong configuration", map.containsKey("List"));
+        Configurator.shutdown(ctx);
+        config = ctx.getConfiguration();
+        assertTrue("Incorrect Configuration. Expected " + DefaultConfiguration.DEFAULT_NAME + " but found " +
+            config.getName(), DefaultConfiguration.DEFAULT_NAME.equals(config.getName()));
+    }
+
+    @Test
+    public void testFromStreamNoId() throws Exception {
+        InputStream is = new FileInputStream("target/test-classes/log4j2-config.xml");
+        InputSource source = new InputSource(is);
+        LoggerContext ctx = Configurator.initialize(null, source);
+        Logger logger = LogManager.getLogger("org.apache.test.TestConfigurator");
+        Configuration config = ctx.getConfiguration();
+        assertNotNull("No configuration", config);
+        assertTrue("Incorrect Configuration. Expected " + CONFIG_NAME + " but found " + config.getName(),
+            CONFIG_NAME.equals(config.getName()));
+        Map<String, Appender> map = config.getAppenders();
+        assertNotNull("No Appenders", map != null && map.size() > 0);
+        assertTrue("Wrong configuration", map.containsKey("List"));
+        Configurator.shutdown(ctx);
+        config = ctx.getConfiguration();
+        assertTrue("Incorrect Configuration. Expected " + DefaultConfiguration.DEFAULT_NAME + " but found " +
+            config.getName(), DefaultConfiguration.DEFAULT_NAME.equals(config.getName()));
+    }
+
+    @Test
     public void testFromClassPath() throws Exception {
         LoggerContext ctx = Configurator.initialize("Test1", null, "log4j2-config.xml");
         Logger logger = LogManager.getLogger("org.apache.test.TestConfigurator");

Modified: logging/log4j/log4j2/trunk/src/changes/changes.xml
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/src/changes/changes.xml?rev=1400365&r1=1400364&r2=1400365&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/src/changes/changes.xml (original)
+++ logging/log4j/log4j2/trunk/src/changes/changes.xml Sat Oct 20 04:47:32 2012
@@ -23,6 +23,9 @@
 
   <body>
     <release version="2.0-beta3" date="TBD" description= "Bug fixes and enhancements">
+      <action issue="LOG4J2-55" dev="rgoers" type="add">
+        Added ability to configure from an InputSource.
+      </action>
       <action issue="LOG4J2-102" dev="rgoers" type="fix" due-to="Emanuele Colombo">
         The Facility value was being improperly calculated.
       </action>