You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by ma...@apache.org on 2014/06/16 02:09:13 UTC

svn commit: r1602779 - in /logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins: util/ visitors/

Author: mattsicker
Date: Mon Jun 16 00:09:12 2014
New Revision: 1602779

URL: http://svn.apache.org/r1602779
Log:
Make the plugin building process debug log messages more useful again.

Modified:
    logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/PluginBuilder.java
    logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginAttributeVisitor.java
    logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginBuilderAttributeVisitor.java
    logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginConfigurationVisitor.java
    logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginElementVisitor.java
    logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginNodeVisitor.java
    logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginValueVisitor.java
    logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginVisitor.java

Modified: logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/PluginBuilder.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/PluginBuilder.java?rev=1602779&r1=1602778&r2=1602779&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/PluginBuilder.java (original)
+++ logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/PluginBuilder.java Mon Jun 16 00:09:12 2014
@@ -125,7 +125,7 @@ public class PluginBuilder<T> implements
         }
         // or fall back to factory method if no builder class is available
         try {
-            LOGGER.debug("Still building Plugin[name={}, class={}]. Searching for factory method...", 
+            LOGGER.debug("Still building Plugin[name={}, class={}]. Searching for factory method...",
                     pluginType.getElementName(), pluginType.getPluginClass().getName());
             final Method factory = findFactoryMethod(this.clazz);
             final Object[] params = generateParameters(factory);
@@ -162,7 +162,9 @@ public class PluginBuilder<T> implements
 
     private void injectFields(final Builder<T> builder) throws IllegalAccessException {
         final Field[] fields = builder.getClass().getDeclaredFields();
+        final StringBuilder log = new StringBuilder();
         for (final Field field : fields) {
+            log.append(log.length() == 0 ? "with params(" : ", ");
             field.setAccessible(true);
             final Annotation[] annotations = field.getDeclaredAnnotations();
             final String[] aliases = extractPluginAliases(annotations);
@@ -178,7 +180,7 @@ public class PluginBuilder<T> implements
                         .setConversionType(field.getType())
                         .setStrSubstitutor(configuration.getStrSubstitutor())
                         .setMember(field)
-                        .visit(configuration, node, event);
+                        .visit(configuration, node, event, log);
                     // don't overwrite default values if the visitor gives us no value to inject
                     if (value != null) {
                         field.set(builder, value);
@@ -186,6 +188,11 @@ public class PluginBuilder<T> implements
                 }
             }
         }
+        if (log.length() > 0) {
+            log.append(')');
+        }
+        LOGGER.debug("Calling build() on class {} for element {} {}", builder.getClass(), node.getName(),
+            log.toString());
         checkForRemainingAttributes();
         verifyNodeChildrenUsed();
     }
@@ -203,11 +210,12 @@ public class PluginBuilder<T> implements
     }
 
     private Object[] generateParameters(final Method factory) {
-        LOGGER.debug("Generating parameters for factory method [{}]...", factory.getName());
+        final StringBuilder log = new StringBuilder();
         final Class<?>[] types = factory.getParameterTypes();
         final Annotation[][] annotations = factory.getParameterAnnotations();
         final Object[] args = new Object[annotations.length];
         for (int i = 0; i < annotations.length; i++) {
+            log.append(log.length() == 0 ? "with params(" : ", ");
             final String[] aliases = extractPluginAliases(annotations[i]);
             for (Annotation a : annotations[i]) {
                 if (a instanceof PluginAliases) {
@@ -221,12 +229,17 @@ public class PluginBuilder<T> implements
                         .setConversionType(types[i])
                         .setStrSubstitutor(configuration.getStrSubstitutor())
                         .setMember(factory)
-                        .visit(configuration, node, event);
+                        .visit(configuration, node, event, log);
                 }
             }
         }
+        if (log.length() > 0) {
+            log.append(')');
+        }
         checkForRemainingAttributes();
         verifyNodeChildrenUsed();
+        LOGGER.debug("Calling {} on class {} for element {} {}", factory.getName(), clazz.getName(), node.getName(),
+            log.toString());
         return args;
     }
 

Modified: logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginAttributeVisitor.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginAttributeVisitor.java?rev=1602779&r1=1602778&r2=1602779&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginAttributeVisitor.java (original)
+++ logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginAttributeVisitor.java Mon Jun 16 00:09:12 2014
@@ -34,7 +34,8 @@ public class PluginAttributeVisitor exte
     }
 
     @Override
-    public Object visit(final Configuration configuration, final Node node, final LogEvent event) {
+    public Object visit(final Configuration configuration, final Node node, final LogEvent event,
+                        final StringBuilder log) {
         final String name = this.annotation.value();
         final Map<String, String> attributes = node.getAttributes();
         final String rawValue = removeAttributeValue(attributes, name, this.aliases);
@@ -42,11 +43,7 @@ public class PluginAttributeVisitor exte
         final Object defaultValue = findDefaultValue(event);
         final Object value = convert(replacedValue, defaultValue);
         final Object debugValue = this.annotation.sensitive() ? NameUtil.md5(value + this.getClass().getName()) : value;
-        if (value != replacedValue) {
-            LOGGER.debug("Attribute({}=\"{}\") - no value specified, using default.", name, debugValue);
-        } else {
-            LOGGER.debug("Attribute({}=\"{}\")", name, debugValue);
-        }
+        log.append(name).append("=\"").append(debugValue).append('"');
         return value;
     }
 

Modified: logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginBuilderAttributeVisitor.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginBuilderAttributeVisitor.java?rev=1602779&r1=1602778&r2=1602779&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginBuilderAttributeVisitor.java (original)
+++ logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginBuilderAttributeVisitor.java Mon Jun 16 00:09:12 2014
@@ -27,7 +27,7 @@ import org.apache.logging.log4j.core.uti
 
 /**
  * PluginVisitor for PluginBuilderAttribute. If {@code null} is returned for the
- * {@link #visit(org.apache.logging.log4j.core.config.Configuration, org.apache.logging.log4j.core.config.Node, org.apache.logging.log4j.core.LogEvent)}
+ * {@link #visit(org.apache.logging.log4j.core.config.Configuration, org.apache.logging.log4j.core.config.Node, org.apache.logging.log4j.core.LogEvent, StringBuilder)}
  * method, then the default value of the field should remain untouched.
  *
  * @see org.apache.logging.log4j.core.config.plugins.util.PluginBuilder
@@ -39,7 +39,8 @@ public class PluginBuilderAttributeVisit
     }
 
     @Override
-    public Object visit(final Configuration configuration, final Node node, final LogEvent event) {
+    public Object visit(final Configuration configuration, final Node node, final LogEvent event,
+                        final StringBuilder log) {
         final String overridden = this.annotation.value();
         final String name = overridden.isEmpty() ? this.member.getName() : overridden;
         final Map<String, String> attributes = node.getAttributes();
@@ -47,7 +48,7 @@ public class PluginBuilderAttributeVisit
         final String replacedValue = this.substitutor.replace(event, rawValue);
         final Object value = convert(replacedValue, null);
         final Object debugValue = this.annotation.sensitive() ? NameUtil.md5(value + this.getClass().getName()) : value;
-        LOGGER.debug("Attribute({}=\"{}\")", name, debugValue);
+        log.append(name).append("=\"").append(debugValue).append('"');
         return value;
     }
 }

Modified: logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginConfigurationVisitor.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginConfigurationVisitor.java?rev=1602779&r1=1602778&r2=1602779&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginConfigurationVisitor.java (original)
+++ logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginConfigurationVisitor.java Mon Jun 16 00:09:12 2014
@@ -31,9 +31,13 @@ public class PluginConfigurationVisitor 
     }
 
     @Override
-    public Object visit(final Configuration configuration, final Node node, final LogEvent event) {
+    public Object visit(final Configuration configuration, final Node node, final LogEvent event,
+                        final StringBuilder log) {
         if (this.conversionType.isInstance(configuration)) {
-            LOGGER.debug("Configuration({})", configuration.getName());
+            log.append("Configuration");
+            if (configuration.getName() != null) {
+                log.append('(').append(configuration.getName()).append(')');
+            }
             return configuration;
         }
         LOGGER.warn("Variable annotated with @PluginConfiguration is not compatible with type {}.",

Modified: logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginElementVisitor.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginElementVisitor.java?rev=1602779&r1=1602778&r2=1602779&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginElementVisitor.java (original)
+++ logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginElementVisitor.java Mon Jun 16 00:09:12 2014
@@ -38,16 +38,23 @@ public class PluginElementVisitor extend
     }
 
     @Override
-    public Object visit(final Configuration configuration, final Node node, final LogEvent event) {
+    public Object visit(final Configuration configuration, final Node node, final LogEvent event,
+                        final StringBuilder log) {
         final String name = this.annotation.value();
         if (this.conversionType.isArray()) {
             setConversionType(this.conversionType.getComponentType());
             final List<Object> values = new ArrayList<Object>();
             final Collection<Node> used = new ArrayList<Node>();
+            log.append("={");
+            boolean first = true;
             for (final Node child : node.getChildren()) {
                 final PluginType<?> childType = child.getType();
                 if (name.equalsIgnoreCase(childType.getElementName()) ||
                     this.conversionType.isAssignableFrom(childType.getPluginClass())) {
+                    if (!first) {
+                        log.append(", ");
+                    }
+                    first = false;
                     used.add(child);
                     final Object childObject = child.getObject();
                     if (childObject == null) {
@@ -55,13 +62,14 @@ public class PluginElementVisitor extend
                         continue;
                     }
                     if (childObject.getClass().isArray()) {
-                        final Object[] o = (Object[]) childObject;
-                        LOGGER.debug("{}={}", name, Arrays.toString(o));
+                        log.append(Arrays.toString((Object[]) childObject)).append('}');
                         return childObject;
                     }
+                    log.append(child.toString());
                     values.add(childObject);
                 }
             }
+            log.append('}');
             // note that we need to return an empty array instead of null if the types are correct
             if (!values.isEmpty() && !this.conversionType.isAssignableFrom(values.get(0).getClass())) {
                 LOGGER.error("Attempted to assign attribute {} to list of type {} which is incompatible with {}.",
@@ -69,7 +77,6 @@ public class PluginElementVisitor extend
                 return null;
             }
             node.getChildren().removeAll(used);
-            LOGGER.debug("{}={}", name, values);
             // we need to use reflection here because values.toArray() will cause type errors at runtime
             final Object[] array = (Object[]) Array.newInstance(this.conversionType, values.size());
             for (int i = 0; i < array.length; i++) {
@@ -79,9 +86,10 @@ public class PluginElementVisitor extend
         }
         final Node namedNode = findNamedNode(name, node.getChildren());
         if (namedNode == null) {
+            log.append("null");
             return null;
         }
-        LOGGER.debug("{}({})", namedNode.getName(), namedNode.toString());
+        log.append(namedNode.getName()).append('(').append(namedNode.toString()).append(')');
         node.getChildren().remove(namedNode);
         return namedNode.getObject();
     }

Modified: logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginNodeVisitor.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginNodeVisitor.java?rev=1602779&r1=1602778&r2=1602779&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginNodeVisitor.java (original)
+++ logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginNodeVisitor.java Mon Jun 16 00:09:12 2014
@@ -31,9 +31,10 @@ public class PluginNodeVisitor extends A
     }
 
     @Override
-    public Object visit(final Configuration configuration, final Node node, final LogEvent event) {
+    public Object visit(final Configuration configuration, final Node node, final LogEvent event,
+                        final StringBuilder log) {
         if (this.conversionType.isInstance(node)) {
-            LOGGER.debug("Node={}", node.getName());
+            log.append("Node=").append(node.getName());
             return node;
         }
         LOGGER.warn("Variable annotated with @PluginNode is not compatible with the type {}.", node.getClass());

Modified: logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginValueVisitor.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginValueVisitor.java?rev=1602779&r1=1602778&r2=1602779&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginValueVisitor.java (original)
+++ logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginValueVisitor.java Mon Jun 16 00:09:12 2014
@@ -31,12 +31,13 @@ public class PluginValueVisitor extends 
     }
 
     @Override
-    public Object visit(final Configuration configuration, final Node node, final LogEvent event) {
+    public Object visit(final Configuration configuration, final Node node, final LogEvent event,
+                        final StringBuilder log) {
         final String name = this.annotation.value();
         final String rawValue = node.getValue() != null ? node.getValue() :
             removeAttributeValue(node.getAttributes(), "value");
         final String value = this.substitutor.replace(event, rawValue);
-        LOGGER.debug("{}={}", name, value);
+        log.append(name).append("=\"").append(value).append('"');
         return value;
     }
 }

Modified: logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginVisitor.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginVisitor.java?rev=1602779&r1=1602778&r2=1602779&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginVisitor.java (original)
+++ logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginVisitor.java Mon Jun 16 00:09:12 2014
@@ -87,7 +87,8 @@ public interface PluginVisitor<A extends
      * @param configuration the current Configuration.
      * @param node          the current Node corresponding to the Plugin object being created.
      * @param event         the current LogEvent that caused this Plugin object to be made (optional).
+     * @param log           the StringBuilder being used to build a debug message.
      * @return the converted value to be used for Plugin creation.
      */
-    Object visit(Configuration configuration, Node node, LogEvent event);
+    Object visit(Configuration configuration, Node node, LogEvent event, StringBuilder log);
 }