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);
}