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 2013/08/19 17:21:37 UTC

svn commit: r1515465 - in /logging/log4j/log4j2/trunk: core/src/main/java/org/apache/logging/log4j/core/appender/ core/src/main/java/org/apache/logging/log4j/core/config/ core/src/main/java/org/apache/logging/log4j/core/config/plugins/ core/src/test/re...

Author: rgoers
Date: Mon Aug 19 15:21:36 2013
New Revision: 1515465

URL: http://svn.apache.org/r1515465
Log:
LOG4J2-360 - Allow Plugins to have aliases. Create aliases for AppenderRef and ErrorRef

Added:
    logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginAliases.java
      - copied, changed from r1514947, logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginAttr.java
Modified:
    logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/appender/AsyncAppender.java
    logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/AppenderRef.java
    logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/BaseConfiguration.java
    logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/XMLConfiguration.java
    logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginManager.java
    logging/log4j/log4j2/trunk/core/src/test/resources/log4j-asynch.xml
    logging/log4j/log4j2/trunk/core/src/test/resources/log4j-test2.xml
    logging/log4j/log4j2/trunk/src/changes/changes.xml

Modified: logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/appender/AsyncAppender.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/appender/AsyncAppender.java?rev=1515465&r1=1515464&r2=1515465&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/appender/AsyncAppender.java (original)
+++ logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/appender/AsyncAppender.java Mon Aug 19 15:21:36 2013
@@ -32,6 +32,7 @@ import org.apache.logging.log4j.core.con
 import org.apache.logging.log4j.core.config.Configuration;
 import org.apache.logging.log4j.core.config.ConfigurationException;
 import org.apache.logging.log4j.core.config.plugins.Plugin;
+import org.apache.logging.log4j.core.config.plugins.PluginAliases;
 import org.apache.logging.log4j.core.config.plugins.PluginAttr;
 import org.apache.logging.log4j.core.config.plugins.PluginConfiguration;
 import org.apache.logging.log4j.core.config.plugins.PluginElement;
@@ -166,7 +167,7 @@ public final class AsyncAppender extends
     @PluginFactory
     public static AsyncAppender createAppender(
                 @PluginElement("AppenderRef") final AppenderRef[] appenderRefs,
-                @PluginAttr("errorRef") final String errorRef,
+                @PluginAttr("errorRef") @PluginAliases("error-ref") final String errorRef,
                 @PluginAttr("blocking") final String blocking,
                 @PluginAttr("bufferSize") final String size,
                 @PluginAttr("name") final String name,

Modified: logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/AppenderRef.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/AppenderRef.java?rev=1515465&r1=1515464&r2=1515465&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/AppenderRef.java (original)
+++ logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/AppenderRef.java Mon Aug 19 15:21:36 2013
@@ -20,6 +20,7 @@ import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.Filter;
 import org.apache.logging.log4j.core.config.plugins.Plugin;
+import org.apache.logging.log4j.core.config.plugins.PluginAliases;
 import org.apache.logging.log4j.core.config.plugins.PluginAttr;
 import org.apache.logging.log4j.core.config.plugins.PluginElement;
 import org.apache.logging.log4j.core.config.plugins.PluginFactory;
@@ -29,6 +30,7 @@ import org.apache.logging.log4j.status.S
  * An Appender reference.
  */
 @Plugin(name = "AppenderRef", category = "Core", printObject = true)
+@PluginAliases("appender-ref")
 public final class AppenderRef {
     private static final Logger LOGGER = StatusLogger.getLogger();
 
@@ -54,6 +56,11 @@ public final class AppenderRef {
         return filter;
     }
 
+    @Override
+    public String toString() {
+        return ref;
+    }
+
     /**
      * Create an Appender reference.
      * @param ref The name of the Appender.

Modified: logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/BaseConfiguration.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/BaseConfiguration.java?rev=1515465&r1=1515464&r2=1515465&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/BaseConfiguration.java (original)
+++ logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/BaseConfiguration.java Mon Aug 19 15:21:36 2013
@@ -36,6 +36,7 @@ import org.apache.logging.log4j.core.Fil
 import org.apache.logging.log4j.core.Layout;
 import org.apache.logging.log4j.core.LogEvent;
 import org.apache.logging.log4j.core.appender.ConsoleAppender;
+import org.apache.logging.log4j.core.config.plugins.PluginAliases;
 import org.apache.logging.log4j.core.config.plugins.PluginAttr;
 import org.apache.logging.log4j.core.config.plugins.PluginConfiguration;
 import org.apache.logging.log4j.core.config.plugins.PluginElement;
@@ -635,7 +636,16 @@ public class BaseConfiguration extends A
          *   If not an array, store the object in the child node into the parameter array.
          */
         for (final Annotation[] parmTypes : parmArray) {
+            String[] aliases = null;
+            for (final Annotation a: parmTypes) {
+                if (a instanceof PluginAliases) {
+                    aliases = ((PluginAliases) a).value();
+                }
+            }
             for (final Annotation a : parmTypes) {
+                if (a instanceof PluginAliases) {
+                    continue;
+                }
                 if (sb.length() == 0) {
                     sb.append(" with params(");
                 } else {
@@ -655,14 +665,15 @@ public class BaseConfiguration extends A
                     final String name = ((PluginValue) a).value();
                     String v = node.getValue();
                     if (v == null) {
-                        v = getAttrValue("value", attrs);
+                        v = getAttrValue("value", null, attrs);
                     }
                     final String value = subst.replace(event, v);
                     sb.append(name).append("=\"").append(value).append("\"");
                     parms[index] = value;
                 } else if (a instanceof PluginAttr) {
-                    final String name = ((PluginAttr) a).value();
-                    final String value = subst.replace(event, getAttrValue(name, attrs));
+                    PluginAttr attr = (PluginAttr) a;
+                    final String name = attr.value();
+                    final String value = subst.replace(event, getAttrValue(name, aliases, attrs));
                     sb.append(name).append("=\"").append(value).append("\"");
                     parms[index] = value;
                 } else if (a instanceof PluginElement) {
@@ -804,13 +815,22 @@ public class BaseConfiguration extends A
         }
     }
 
-    private String getAttrValue(final String name, final Map<String, String> attrs) {
+    private String getAttrValue(final String name, final String[] aliases, final Map<String, String> attrs) {
         for (final String key : attrs.keySet()) {
             if (key.equalsIgnoreCase(name)) {
                 final String attr = attrs.get(key);
                 attrs.remove(key);
                 return attr;
             }
+            if (aliases != null) {
+                for (String alias : aliases) {
+                    if (key.equalsIgnoreCase(alias)) {
+                        final String attr = attrs.get(key);
+                        attrs.remove(key);
+                        return attr;
+                    }
+                }
+            }
         }
         return null;
     }

Modified: logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/XMLConfiguration.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/XMLConfiguration.java?rev=1515465&r1=1515464&r2=1515465&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/XMLConfiguration.java (original)
+++ logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/XMLConfiguration.java Mon Aug 19 15:21:36 2013
@@ -73,7 +73,7 @@ public class XMLConfiguration extends Ba
 
     /**
      * Creates a new DocumentBuilder suitable for parsing a configuration file.
-     * 
+     *
      * @return a new DocumentBuilder
      * @throws ParserConfigurationException
      */
@@ -87,7 +87,7 @@ public class XMLConfiguration extends Ba
 
     /**
      * Enables XInclude for the given DocumentBuilderFactory
-     * 
+     *
      * @param factory
      *            a DocumentBuilderFactory
      * @throws ParserConfigurationException
@@ -345,7 +345,8 @@ public class XMLConfiguration extends Ba
             if (w3cNode instanceof Element) {
                 final Element child = (Element) w3cNode;
                 final String name = getType(child);
-                final PluginType<?> type = getPluginManager().getPluginType(name);
+                PluginManager mgr = getPluginManager();
+                final PluginType<?> type = mgr.getPluginType(name);
                 final Node childNode = new Node(node, name, type);
                 constructHierarchy(childNode, child);
                 if (type == null) {

Copied: logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginAliases.java (from r1514947, logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginAttr.java)
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginAliases.java?p2=logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginAliases.java&p1=logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginAttr.java&r1=1514947&r2=1515465&rev=1515465&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginAttr.java (original)
+++ logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginAliases.java Mon Aug 19 15:21:36 2013
@@ -25,8 +25,8 @@ import java.lang.annotation.Target;
  * Identifies a Plugin Attribute.
  */
 @Retention(RetentionPolicy.RUNTIME)
-@Target(ElementType.PARAMETER)
-public @interface PluginAttr {
+@Target({ElementType.PARAMETER, ElementType.TYPE})
+public @interface PluginAliases {
 
-    String value();
+    String[] value();
 }

Modified: logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginManager.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginManager.java?rev=1515465&r1=1515464&r2=1515465&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginManager.java (original)
+++ logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginManager.java Mon Aug 19 15:21:36 2013
@@ -174,14 +174,22 @@ public class PluginManager {
         }
         for (final Class<?> clazz : resolver.getClasses()) {
             final Plugin plugin = clazz.getAnnotation(Plugin.class);
-            final String pluginType = plugin.category();
-            if (!pluginTypeMap.containsKey(pluginType)) {
-                pluginTypeMap.putIfAbsent(pluginType, new ConcurrentHashMap<String, PluginType<?>>());
-            }
-            final Map<String, PluginType<?>> map = pluginTypeMap.get(pluginType);
-            final String type = plugin.elementType().equals(Plugin.EMPTY) ? plugin.name() : plugin.elementType();
-            map.put(plugin.name().toLowerCase(), new PluginType(clazz, type, plugin.printObject(),
-                plugin.deferChildren()));
+            final String pluginCategory = plugin.category();
+            if (!pluginTypeMap.containsKey(pluginCategory)) {
+                pluginTypeMap.putIfAbsent(pluginCategory, new ConcurrentHashMap<String, PluginType<?>>());
+            }
+            final Map<String, PluginType<?>> map = pluginTypeMap.get(pluginCategory);
+            String type = plugin.elementType().equals(Plugin.EMPTY) ? plugin.name() : plugin.elementType();
+            PluginType pluginType = new PluginType(clazz, type, plugin.printObject(), plugin.deferChildren());
+            map.put(plugin.name().toLowerCase(), pluginType);
+            final PluginAliases pluginAliases = clazz.getAnnotation(PluginAliases.class);
+            if (pluginAliases != null) {
+                for (String alias : pluginAliases.value()) {
+                    type =  plugin.elementType().equals(Plugin.EMPTY) ? alias : plugin.elementType();
+                    pluginType = new PluginType(clazz, type, plugin.printObject(), plugin.deferChildren());
+                    map.put(alias.trim().toLowerCase(), pluginType);
+                }
+            }
         }
         long elapsed = System.nanoTime() - start;
         plugins = pluginTypeMap.get(type);

Modified: logging/log4j/log4j2/trunk/core/src/test/resources/log4j-asynch.xml
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/core/src/test/resources/log4j-asynch.xml?rev=1515465&r1=1515464&r2=1515465&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/core/src/test/resources/log4j-asynch.xml (original)
+++ logging/log4j/log4j2/trunk/core/src/test/resources/log4j-asynch.xml Mon Aug 19 15:21:36 2013
@@ -25,7 +25,7 @@
     <List name="List">
       <PatternLayout pattern="%C %M %m"/>
     </List>
-    <Async name="Async" includeLocation="true">
+    <Async name="Async" includeLocation="true" error-ref="STDOUT">
       <AppenderRef ref="List"/>
     </Async>
   </Appenders>

Modified: logging/log4j/log4j2/trunk/core/src/test/resources/log4j-test2.xml
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/core/src/test/resources/log4j-test2.xml?rev=1515465&r1=1515464&r2=1515465&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/core/src/test/resources/log4j-test2.xml (original)
+++ logging/log4j/log4j2/trunk/core/src/test/resources/log4j-test2.xml Mon Aug 19 15:21:36 2013
@@ -61,7 +61,8 @@
     </Logger>>
 
     <Logger name="org.apache.logging.log4j.hosttest" level="debug" additivity="false">
-      <AppenderRef ref="HostTest"/>
+      <!-- User appender-ref alias to prove it works -->
+      <appender-ref ref="HostTest"/>
     </Logger>
 
 

Modified: logging/log4j/log4j2/trunk/src/changes/changes.xml
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/src/changes/changes.xml?rev=1515465&r1=1515464&r2=1515465&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/src/changes/changes.xml (original)
+++ logging/log4j/log4j2/trunk/src/changes/changes.xml Mon Aug 19 15:21:36 2013
@@ -21,6 +21,9 @@
   </properties>
   <body>
     <release version="2.0-beta9" date="soon, very soon" description="Bug fixes and enhancements">
+      <action issue="LOG4J2-360" dev="rgoers" type="update">
+        Allow Plugins to have aliases.
+      </action>
       <action issue="LOG4J2-358" dev="nickwilliams" type="fix">
         NoSQLAppender using MongoDB provider ignores username and password attributes
       </action>