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 2019/10/07 02:10:00 UTC

[logging-log4j2] branch master updated (ff7ab76 -> 1cd4499)

This is an automated email from the ASF dual-hosted git repository.

mattsicker pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git.


    from ff7ab76  Update docs for LOG4J2-860
     new 79ff12b  Enable parameter reflection
     new 4615978  Simplify exception handling
     new 1cd4499  Simplify annotation usage

The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../org/apache/log4j/layout/Log4j1XmlLayout.java   |  4 +-
 .../log4j/core/appender/CountingNoOpAppender.java  |  2 +-
 .../log4j/core/appender/FailoverAppender.java      | 35 +++++----------
 .../logging/log4j/core/appender/NullAppender.java  |  2 +-
 .../core/appender/rewrite/MapRewritePolicy.java    |  2 +-
 .../core/appender/rewrite/RewriteAppender.java     | 22 +++-------
 .../appender/rolling/CronTriggeringPolicy.java     |  4 +-
 .../rolling/OnStartupTriggeringPolicy.java         |  2 +-
 .../rolling/SizeBasedTriggeringPolicy.java         |  2 +-
 .../core/appender/rolling/action/DeleteAction.java | 14 +++---
 .../core/appender/rolling/action/IfFileName.java   |  4 +-
 .../appender/rolling/action/IfLastModified.java    |  2 +-
 .../rolling/action/PathSortByModificationTime.java |  2 +-
 .../core/appender/routing/IdlePurgePolicy.java     |  6 +--
 .../logging/log4j/core/appender/routing/Route.java |  2 +-
 .../log4j/core/appender/routing/Routes.java        |  4 +-
 .../log4j/core/async/AsyncLoggerConfig.java        | 24 +++++------
 .../core/async/DisruptorBlockingQueueFactory.java  |  2 +-
 .../core/async/JCToolsBlockingQueueFactory.java    |  2 +-
 .../logging/log4j/core/config/AppenderRef.java     | 15 ++-----
 .../log4j/core/config/CustomLevelConfig.java       |  2 +-
 .../logging/log4j/core/config/LoggerConfig.java    | 24 +++++------
 .../apache/logging/log4j/core/config/Property.java | 12 ++----
 .../core/config/plugins/util/PluginBuilder.java    | 18 ++++----
 .../log4j/core/filter/DynamicThresholdFilter.java  | 10 ++---
 .../log4j/core/filter/LevelRangeFilter.java        |  8 ++--
 .../logging/log4j/core/filter/MapFilter.java       | 12 +++---
 .../logging/log4j/core/filter/MarkerFilter.java    | 13 +++---
 .../logging/log4j/core/filter/RegexFilter.java     | 16 +++----
 .../logging/log4j/core/filter/ScriptFilter.java    | 12 +++---
 .../log4j/core/filter/StructuredDataFilter.java    | 18 ++++----
 .../log4j/core/filter/ThreadContextMapFilter.java  | 12 +++---
 .../logging/log4j/core/filter/ThresholdFilter.java |  2 +-
 .../logging/log4j/core/filter/TimeFilter.java      |  4 +-
 .../logging/log4j/core/layout/HtmlLayout.java      | 10 ++---
 .../logging/log4j/core/layout/LoggerFields.java    |  8 ++--
 .../logging/log4j/core/layout/Rfc5424Layout.java   | 25 ++++++-----
 .../log4j/core/net/ssl/KeyStoreConfiguration.java  | 10 ++---
 .../log4j/core/net/ssl/SslConfiguration.java       | 14 +++---
 .../core/net/ssl/TrustStoreConfiguration.java      | 10 ++---
 .../log4j/core/pattern/RegexReplacement.java       |  4 +-
 .../apache/logging/log4j/core/script/Script.java   |  6 +--
 .../logging/log4j/core/script/ScriptFile.java      |  8 ++--
 .../log4j/core/appender/HangingAppender.java       | 12 +++---
 .../logging/log4j/core/async/BlockingAppender.java |  6 +--
 .../log4j/test/appender/AlwaysFailAppender.java    |  2 +-
 .../log4j/test/appender/BlockingAppender.java      |  2 +-
 .../log4j/test/appender/DeadlockAppender.java      |  2 +-
 .../log4j/test/appender/FailOnceAppender.java      |  2 +-
 .../log4j/test/appender/UsesLoggingAppender.java   |  6 +--
 .../logging/log4j/couchdb/CouchDbProvider.java     | 16 +++----
 .../log4j/csv/layout/CsvLogEventLayout.java        | 20 ++++-----
 .../log4j/csv/layout/CsvParameterLayout.java       | 20 ++++-----
 .../log4j/flume/appender/FlumeAppender.java        | 34 +++++++--------
 .../jdbc/appender/DataSourceConnectionSource.java  |  2 +-
 .../log4j/jeromq/appender/JeroMqAppender.java      | 50 +++++++++++-----------
 .../logging/log4j/jpa/appender/JpaAppender.java    | 10 ++---
 .../log4j/kafka/appender/KafkaAppender.java        |  6 +--
 .../log4j/plugins/validation/HostAndPort.java      |  4 +-
 .../PluginWithGenericSubclassFoo1Builder.java      |  9 +---
 .../ValidatingPluginWithGenericBuilder.java        | 10 +----
 .../logging/log4j/smtp/appender/SmtpAppender.java  | 28 ++++++------
 pom.xml                                            |  1 +
 63 files changed, 302 insertions(+), 350 deletions(-)


[logging-log4j2] 01/03: Enable parameter reflection

Posted by ma...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

mattsicker pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git

commit 79ff12b8e33b3b4f808bdf61b49c20c15938a444
Author: Matt Sicker <bo...@gmail.com>
AuthorDate: Sun Oct 6 21:05:54 2019 -0500

    Enable parameter reflection
    
    Signed-off-by: Matt Sicker <bo...@gmail.com>
---
 pom.xml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/pom.xml b/pom.xml
index fe94fb8..425915c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -953,6 +953,7 @@
             </compilerArguments>
             <compilerId>javac-with-errorprone</compilerId>
             <forceJavacCompilerUse>true</forceJavacCompilerUse>
+            <parameters>true</parameters>
           </configuration>
           <dependencies>
             <dependency>


[logging-log4j2] 02/03: Simplify exception handling

Posted by ma...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

mattsicker pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git

commit 4615978dcc70fc8e64b004a4cd90a1132a3931c2
Author: Matt Sicker <bo...@gmail.com>
AuthorDate: Sun Oct 6 21:07:17 2019 -0500

    Simplify exception handling
    
    Signed-off-by: Matt Sicker <bo...@gmail.com>
---
 .../log4j/core/config/plugins/util/PluginBuilder.java  | 18 ++++++++++--------
 1 file changed, 10 insertions(+), 8 deletions(-)

diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/PluginBuilder.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/PluginBuilder.java
index 51f9c3e..5fa120d 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/PluginBuilder.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/PluginBuilder.java
@@ -20,7 +20,6 @@ package org.apache.logging.log4j.core.config.plugins.util;
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.LogEvent;
 import org.apache.logging.log4j.core.config.Configuration;
-import org.apache.logging.log4j.core.config.ConfigurationException;
 import org.apache.logging.log4j.core.lookup.StrSubstitutor;
 import org.apache.logging.log4j.plugins.Node;
 import org.apache.logging.log4j.plugins.PluginAliases;
@@ -117,21 +116,24 @@ public class PluginBuilder implements Builder<Object> {
     @Override
     public Object build() {
         verify();
+        LOGGER.debug("Building Plugin[name={}, class={}].", pluginType.getElementName(),
+                pluginType.getPluginClass().getName());
         substitutor = new Substitutor(event);
         // first try to use a builder class if one is available
         try {
-            LOGGER.debug("Building Plugin[name={}, class={}].", pluginType.getElementName(),
-                    pluginType.getPluginClass().getName());
             final Builder<?> builder = createBuilder(this.clazz);
             if (builder != null) {
                 return injectBuilder(builder);
             }
-        } catch (final ConfigurationException e) { // LOG4J2-1908
-            LOGGER.error("Could not create plugin of type {} for element {}", this.clazz, node.getName(), e);
+        } catch (final InvocationTargetException e) {
+            LOGGER.error("Could not create plugin builder for plugin {} and element {}", clazz, node.getName(), e.getCause());
+            return null;
+        } catch (final IllegalAccessException e) {
+            LOGGER.error("Could not access plugin builder for plugin {} and element {}", clazz, node.getName());
+            return null;
+        } catch (final RuntimeException e) { // LOG4J2-1908
+            LOGGER.error("Could not create plugin of type {} for element {}", clazz, node.getName(), e);
             return null; // no point in trying the factory method
-        } catch (final Exception e) {
-            LOGGER.error("Could not create plugin of type {} for element {}: {}", clazz, node.getName(),
-                    e.toString(), e);
         }
         // or fall back to factory method if no builder class is available
         try {


[logging-log4j2] 03/03: Simplify annotation usage

Posted by ma...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

mattsicker pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git

commit 1cd449988476074b8397c97c81a2917bcb69e6c1
Author: Matt Sicker <bo...@gmail.com>
AuthorDate: Sun Oct 6 21:09:51 2019 -0500

    Simplify annotation usage
    
    This removes redundant annotation values.
    
    Signed-off-by: Matt Sicker <bo...@gmail.com>
---
 .../org/apache/log4j/layout/Log4j1XmlLayout.java   |  4 +-
 .../log4j/core/appender/CountingNoOpAppender.java  |  2 +-
 .../log4j/core/appender/FailoverAppender.java      | 35 +++++----------
 .../logging/log4j/core/appender/NullAppender.java  |  2 +-
 .../core/appender/rewrite/MapRewritePolicy.java    |  2 +-
 .../core/appender/rewrite/RewriteAppender.java     | 22 +++-------
 .../appender/rolling/CronTriggeringPolicy.java     |  4 +-
 .../rolling/OnStartupTriggeringPolicy.java         |  2 +-
 .../rolling/SizeBasedTriggeringPolicy.java         |  2 +-
 .../core/appender/rolling/action/DeleteAction.java | 14 +++---
 .../core/appender/rolling/action/IfFileName.java   |  4 +-
 .../appender/rolling/action/IfLastModified.java    |  2 +-
 .../rolling/action/PathSortByModificationTime.java |  2 +-
 .../core/appender/routing/IdlePurgePolicy.java     |  6 +--
 .../logging/log4j/core/appender/routing/Route.java |  2 +-
 .../log4j/core/appender/routing/Routes.java        |  4 +-
 .../log4j/core/async/AsyncLoggerConfig.java        | 24 +++++------
 .../core/async/DisruptorBlockingQueueFactory.java  |  2 +-
 .../core/async/JCToolsBlockingQueueFactory.java    |  2 +-
 .../logging/log4j/core/config/AppenderRef.java     | 15 ++-----
 .../log4j/core/config/CustomLevelConfig.java       |  2 +-
 .../logging/log4j/core/config/LoggerConfig.java    | 24 +++++------
 .../apache/logging/log4j/core/config/Property.java | 12 ++----
 .../log4j/core/filter/DynamicThresholdFilter.java  | 10 ++---
 .../log4j/core/filter/LevelRangeFilter.java        |  8 ++--
 .../logging/log4j/core/filter/MapFilter.java       | 12 +++---
 .../logging/log4j/core/filter/MarkerFilter.java    | 13 +++---
 .../logging/log4j/core/filter/RegexFilter.java     | 16 +++----
 .../logging/log4j/core/filter/ScriptFilter.java    | 12 +++---
 .../log4j/core/filter/StructuredDataFilter.java    | 18 ++++----
 .../log4j/core/filter/ThreadContextMapFilter.java  | 12 +++---
 .../logging/log4j/core/filter/ThresholdFilter.java |  2 +-
 .../logging/log4j/core/filter/TimeFilter.java      |  4 +-
 .../logging/log4j/core/layout/HtmlLayout.java      | 10 ++---
 .../logging/log4j/core/layout/LoggerFields.java    |  8 ++--
 .../logging/log4j/core/layout/Rfc5424Layout.java   | 25 ++++++-----
 .../log4j/core/net/ssl/KeyStoreConfiguration.java  | 10 ++---
 .../log4j/core/net/ssl/SslConfiguration.java       | 14 +++---
 .../core/net/ssl/TrustStoreConfiguration.java      | 10 ++---
 .../log4j/core/pattern/RegexReplacement.java       |  4 +-
 .../apache/logging/log4j/core/script/Script.java   |  6 +--
 .../logging/log4j/core/script/ScriptFile.java      |  8 ++--
 .../log4j/core/appender/HangingAppender.java       | 12 +++---
 .../logging/log4j/core/async/BlockingAppender.java |  6 +--
 .../log4j/test/appender/AlwaysFailAppender.java    |  2 +-
 .../log4j/test/appender/BlockingAppender.java      |  2 +-
 .../log4j/test/appender/DeadlockAppender.java      |  2 +-
 .../log4j/test/appender/FailOnceAppender.java      |  2 +-
 .../log4j/test/appender/UsesLoggingAppender.java   |  6 +--
 .../logging/log4j/couchdb/CouchDbProvider.java     | 16 +++----
 .../log4j/csv/layout/CsvLogEventLayout.java        | 20 ++++-----
 .../log4j/csv/layout/CsvParameterLayout.java       | 20 ++++-----
 .../log4j/flume/appender/FlumeAppender.java        | 34 +++++++--------
 .../jdbc/appender/DataSourceConnectionSource.java  |  2 +-
 .../log4j/jeromq/appender/JeroMqAppender.java      | 50 +++++++++++-----------
 .../logging/log4j/jpa/appender/JpaAppender.java    | 10 ++---
 .../log4j/kafka/appender/KafkaAppender.java        |  6 +--
 .../log4j/plugins/validation/HostAndPort.java      |  4 +-
 .../PluginWithGenericSubclassFoo1Builder.java      |  9 +---
 .../ValidatingPluginWithGenericBuilder.java        | 10 +----
 .../logging/log4j/smtp/appender/SmtpAppender.java  | 28 ++++++------
 61 files changed, 291 insertions(+), 342 deletions(-)

diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/layout/Log4j1XmlLayout.java b/log4j-1.2-api/src/main/java/org/apache/log4j/layout/Log4j1XmlLayout.java
index 8d23307..899ebb6 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/layout/Log4j1XmlLayout.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/layout/Log4j1XmlLayout.java
@@ -48,8 +48,8 @@ public final class Log4j1XmlLayout extends AbstractStringLayout {
     @PluginFactory
     public static Log4j1XmlLayout createLayout(
             // @formatter:off
-            @PluginAttribute(value = "locationInfo") final boolean locationInfo,
-            @PluginAttribute(value = "properties") final boolean properties
+            @PluginAttribute final boolean locationInfo,
+            @PluginAttribute final boolean properties
             // @formatter:on
     ) {
         return new Log4j1XmlLayout(locationInfo, properties);
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/CountingNoOpAppender.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/CountingNoOpAppender.java
index 51e4d3b..e5628f4 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/CountingNoOpAppender.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/CountingNoOpAppender.java
@@ -53,7 +53,7 @@ public class CountingNoOpAppender extends AbstractAppender  {
      * Creates a CountingNoOp Appender.
      */
     @PluginFactory
-    public static CountingNoOpAppender createAppender(@PluginAttribute("name") final String name) {
+    public static CountingNoOpAppender createAppender(@PluginAttribute final String name) {
         return new CountingNoOpAppender(Objects.requireNonNull(name), null);
     }
 }
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FailoverAppender.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FailoverAppender.java
index e907fe3..7cab755 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FailoverAppender.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FailoverAppender.java
@@ -37,6 +37,7 @@ import org.apache.logging.log4j.plugins.PluginElement;
 import org.apache.logging.log4j.plugins.PluginFactory;
 import org.apache.logging.log4j.core.util.Booleans;
 import org.apache.logging.log4j.core.util.Constants;
+import org.apache.logging.log4j.plugins.validation.constraints.Required;
 
 /**
  * The FailoverAppender will capture exceptions in an Appender and then route the event
@@ -182,38 +183,22 @@ public final class FailoverAppender extends AbstractAppender {
      */
     @PluginFactory
     public static FailoverAppender createAppender(
-            @PluginAttribute("name") final String name,
-            @PluginAttribute("primary") final String primary,
-            @PluginElement("Failovers") final String[] failovers,
+            @PluginAttribute @Required(message = "A name for the Appender must be specified") final String name,
+            @PluginAttribute @Required(message = "A primary Appender must be specified") final String primary,
+            @PluginElement @Required(message = "At least one failover Appender must be specified") final String[] failovers,
             @PluginAliases("retryInterval") // deprecated
-            @PluginAttribute("retryIntervalSeconds") final String retryIntervalSeconds,
+            @PluginAttribute(defaultInt = DEFAULT_INTERVAL_SECONDS) final int retryIntervalSeconds,
             @PluginConfiguration final Configuration config,
-            @PluginElement("Filter") final Filter filter,
-            @PluginAttribute("ignoreExceptions") final String ignore) {
-        if (name == null) {
-            LOGGER.error("A name for the Appender must be specified");
-            return null;
-        }
-        if (primary == null) {
-            LOGGER.error("A primary Appender must be specified");
-            return null;
-        }
-        if (failovers == null || failovers.length == 0) {
-            LOGGER.error("At least one failover Appender must be specified");
-            return null;
-        }
+            @PluginElement final Filter filter,
+            @PluginAttribute(defaultBoolean = true) final boolean ignoreExceptions) {
 
-        final int seconds = parseInt(retryIntervalSeconds, DEFAULT_INTERVAL_SECONDS);
         int retryIntervalMillis;
-        if (seconds >= 0) {
-            retryIntervalMillis = seconds * Constants.MILLIS_IN_SECONDS;
+        if (retryIntervalSeconds >= 0) {
+            retryIntervalMillis = retryIntervalSeconds * Constants.MILLIS_IN_SECONDS;
         } else {
-            LOGGER.warn("Interval " + retryIntervalSeconds + " is less than zero. Using default");
+            LOGGER.warn("Interval {} is less than zero. Using default", retryIntervalSeconds);
             retryIntervalMillis = DEFAULT_INTERVAL_SECONDS * Constants.MILLIS_IN_SECONDS;
         }
-
-        final boolean ignoreExceptions = Booleans.parseBoolean(ignore, true);
-
         return new FailoverAppender(name, filter, primary, failovers, retryIntervalMillis, config, ignoreExceptions, Property.EMPTY_ARRAY);
     }
 }
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/NullAppender.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/NullAppender.java
index 0aa4ced..f84e04c 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/NullAppender.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/NullAppender.java
@@ -35,7 +35,7 @@ public class NullAppender extends AbstractAppender {
 
     @PluginFactory
     public static NullAppender createAppender(
-            @PluginAttribute(value = "name", defaultString = "null") final String name) {
+            @PluginAttribute(defaultString = "null") final String name) {
         return new NullAppender(name);
     }
 
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rewrite/MapRewritePolicy.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rewrite/MapRewritePolicy.java
index 1082573..0072d29 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rewrite/MapRewritePolicy.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rewrite/MapRewritePolicy.java
@@ -127,7 +127,7 @@ public final class MapRewritePolicy implements RewritePolicy {
      */
     @PluginFactory
     public static MapRewritePolicy createPolicy(
-            @PluginAttribute("mode") final String mode,
+            @PluginAttribute final String mode,
             @PluginElement("KeyValuePair") final KeyValuePair[] pairs) {
         Mode op = mode == null ? op = Mode.Add : Mode.valueOf(mode);
         if (pairs == null || pairs.length == 0) {
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rewrite/RewriteAppender.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rewrite/RewriteAppender.java
index 5e2661f..3d8aa26 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rewrite/RewriteAppender.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rewrite/RewriteAppender.java
@@ -33,7 +33,7 @@ import org.apache.logging.log4j.plugins.PluginAttribute;
 import org.apache.logging.log4j.core.config.plugins.PluginConfiguration;
 import org.apache.logging.log4j.plugins.PluginElement;
 import org.apache.logging.log4j.plugins.PluginFactory;
-import org.apache.logging.log4j.core.util.Booleans;
+import org.apache.logging.log4j.plugins.validation.constraints.Required;
 
 /**
  * This Appender allows the logging event to be manipulated before it is processed by other Appenders.
@@ -98,22 +98,12 @@ public final class RewriteAppender extends AbstractAppender {
      */
     @PluginFactory
     public static RewriteAppender createAppender(
-            @PluginAttribute("name") final String name,
-            @PluginAttribute("ignoreExceptions") final String ignore,
-            @PluginElement("AppenderRef") final AppenderRef[] appenderRefs,
+            @PluginAttribute @Required(message = "No name provided for RewriteAppender") final String name,
+            @PluginAttribute(defaultBoolean = true) final boolean ignoreExceptions,
+            @PluginElement @Required(message = "No appender references defined for RewriteAppender") final AppenderRef[] appenderRefs,
             @PluginConfiguration final Configuration config,
-            @PluginElement("RewritePolicy") final RewritePolicy rewritePolicy,
-            @PluginElement("Filter") final Filter filter) {
-
-        final boolean ignoreExceptions = Booleans.parseBoolean(ignore, true);
-        if (name == null) {
-            LOGGER.error("No name provided for RewriteAppender");
-            return null;
-        }
-        if (appenderRefs == null) {
-            LOGGER.error("No appender references defined for RewriteAppender");
-            return null;
-        }
+            @PluginElement final RewritePolicy rewritePolicy,
+            @PluginElement final Filter filter) {
         return new RewriteAppender(name, filter, ignoreExceptions, appenderRefs, rewritePolicy, config, Property.EMPTY_ARRAY);
     }
 }
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/CronTriggeringPolicy.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/CronTriggeringPolicy.java
index 03cf69b..1dbc119 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/CronTriggeringPolicy.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/CronTriggeringPolicy.java
@@ -120,8 +120,8 @@ public final class CronTriggeringPolicy extends AbstractTriggeringPolicy {
      */
     @PluginFactory
     public static CronTriggeringPolicy createPolicy(@PluginConfiguration final Configuration configuration,
-            @PluginAttribute("evaluateOnStartup") final String evaluateOnStartup,
-            @PluginAttribute("schedule") final String schedule) {
+            @PluginAttribute final String evaluateOnStartup,
+            @PluginAttribute final String schedule) {
         CronExpression cronExpression;
         final boolean checkOnStartup = Boolean.parseBoolean(evaluateOnStartup);
         if (schedule == null) {
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/OnStartupTriggeringPolicy.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/OnStartupTriggeringPolicy.java
index cfd8f38..d7a2c74 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/OnStartupTriggeringPolicy.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/OnStartupTriggeringPolicy.java
@@ -103,7 +103,7 @@ public class OnStartupTriggeringPolicy extends AbstractTriggeringPolicy {
 
     @PluginFactory
     public static OnStartupTriggeringPolicy createPolicy(
-            @PluginAttribute(value = "minSize", defaultLong = 1) final long minSize) {
+            @PluginAttribute(defaultLong = 1) final long minSize) {
         return new OnStartupTriggeringPolicy(minSize);
     }
 }
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/SizeBasedTriggeringPolicy.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/SizeBasedTriggeringPolicy.java
index 8fde3d9..73245d1 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/SizeBasedTriggeringPolicy.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/SizeBasedTriggeringPolicy.java
@@ -92,7 +92,7 @@ public class SizeBasedTriggeringPolicy extends AbstractTriggeringPolicy {
      * @return A SizeBasedTriggeringPolicy.
      */
     @PluginFactory
-    public static SizeBasedTriggeringPolicy createPolicy(@PluginAttribute("size") final String size) {
+    public static SizeBasedTriggeringPolicy createPolicy(@PluginAttribute final String size) {
 
         final long maxSize = size == null ? MAX_FILE_SIZE : FileSize.parse(size, MAX_FILE_SIZE);
         return new SizeBasedTriggeringPolicy(maxSize);
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/DeleteAction.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/DeleteAction.java
index cebafb7..995d8d1 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/DeleteAction.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/DeleteAction.java
@@ -199,13 +199,13 @@ public class DeleteAction extends AbstractPathAction {
     @PluginFactory
     public static DeleteAction createDeleteAction(
             // @formatter:off
-            @PluginAttribute("basePath") final String basePath, 
-            @PluginAttribute(value = "followLinks") final boolean followLinks,
-            @PluginAttribute(value = "maxDepth", defaultInt = 1) final int maxDepth,
-            @PluginAttribute(value = "testMode") final boolean testMode,
-            @PluginElement("PathSorter") final PathSorter sorterParameter,
-            @PluginElement("PathConditions") final PathCondition[] pathConditions,
-            @PluginElement("ScriptCondition") final ScriptCondition scriptCondition,
+            @PluginAttribute final String basePath,
+            @PluginAttribute final boolean followLinks,
+            @PluginAttribute(defaultInt = 1) final int maxDepth,
+            @PluginAttribute final boolean testMode,
+            @PluginElement final PathSorter sorterParameter,
+            @PluginElement final PathCondition[] pathConditions,
+            @PluginElement final ScriptCondition scriptCondition,
             @PluginConfiguration final Configuration config) {
             // @formatter:on
         final PathSorter sorter = sorterParameter == null ? new PathSortByModificationTime(true) : sorterParameter;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/IfFileName.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/IfFileName.java
index 509fbc6..bdf14dd 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/IfFileName.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/IfFileName.java
@@ -135,8 +135,8 @@ public final class IfFileName implements PathCondition {
     @PluginFactory
     public static IfFileName createNameCondition( 
             // @formatter:off
-            @PluginAttribute("glob") final String glob, 
-            @PluginAttribute("regex") final String regex, 
+            @PluginAttribute final String glob,
+            @PluginAttribute final String regex,
             @PluginElement("PathConditions") final PathCondition... nestedConditions) {
             // @formatter:on
         return new IfFileName(glob, regex, nestedConditions);
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/IfLastModified.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/IfLastModified.java
index d232280..7aa3e73 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/IfLastModified.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/IfLastModified.java
@@ -100,7 +100,7 @@ public final class IfLastModified implements PathCondition {
     @PluginFactory
     public static IfLastModified createAgeCondition( 
             // @formatter:off
-            @PluginAttribute("age") final Duration age, 
+            @PluginAttribute final Duration age,
             @PluginElement("PathConditions") final PathCondition... nestedConditions) {
             // @formatter:on
         return new IfLastModified(age, nestedConditions);
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/PathSortByModificationTime.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/PathSortByModificationTime.java
index 1568dba..68c0086 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/PathSortByModificationTime.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/PathSortByModificationTime.java
@@ -53,7 +53,7 @@ public class PathSortByModificationTime implements PathSorter, Serializable {
      */
     @PluginFactory
     public static PathSorter createSorter( 
-            @PluginAttribute(value = "recentFirst", defaultBoolean = true) final boolean recentFirst) {
+            @PluginAttribute(defaultBoolean = true) final boolean recentFirst) {
         return new PathSortByModificationTime(recentFirst);
     }
 
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/routing/IdlePurgePolicy.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/routing/IdlePurgePolicy.java
index 2b9510c..950cdd9 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/routing/IdlePurgePolicy.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/routing/IdlePurgePolicy.java
@@ -130,9 +130,9 @@ public class IdlePurgePolicy extends AbstractLifeCycle implements PurgePolicy, R
      */
     @PluginFactory
     public static PurgePolicy createPurgePolicy(
-        @PluginAttribute("timeToLive") final String timeToLive,
-        @PluginAttribute("checkInterval") final String checkInterval,
-        @PluginAttribute("timeUnit") final String timeUnit,
+        @PluginAttribute final String timeToLive,
+        @PluginAttribute final String checkInterval,
+        @PluginAttribute final String timeUnit,
         @PluginConfiguration final Configuration configuration) {
 
         if (timeToLive == null) {
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/routing/Route.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/routing/Route.java
index 5211b7d..a5a6290 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/routing/Route.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/routing/Route.java
@@ -96,7 +96,7 @@ public final class Route {
     @PluginFactory
     public static Route createRoute(
             @PluginAttribute("ref") final String appenderRef,
-            @PluginAttribute("key") final String key,
+            @PluginAttribute final String key,
             @PluginNode final Node node) {
         if (node != null && node.hasChildren()) {
             if (appenderRef != null) {
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/routing/Routes.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/routing/Routes.java
index 9f46dc6..0dbab8b 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/routing/Routes.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/routing/Routes.java
@@ -49,13 +49,13 @@ public final class Routes {
         @PluginConfiguration 
         private Configuration configuration;
 
-        @PluginAttribute("pattern") 
+        @PluginAttribute
         private String pattern;
         
         @PluginElement("Script")
         private AbstractScript patternScript;
 
-        @PluginElement("Routes")
+        @PluginElement
         @Required
         private Route[] routes;
 
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLoggerConfig.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLoggerConfig.java
index 1ecf153..3a6613f 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLoggerConfig.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLoggerConfig.java
@@ -208,14 +208,14 @@ public class AsyncLoggerConfig extends LoggerConfig {
      */
     @PluginFactory
     public static LoggerConfig createLogger(
-            @PluginAttribute(value = "additivity", defaultBoolean = true) final boolean additivity,
-            @PluginAttribute("level") final Level level,
+            @PluginAttribute(defaultBoolean = true) final boolean additivity,
+            @PluginAttribute final Level level,
             @Required(message = "Loggers cannot be configured without a name") @PluginAttribute("name") final String loggerName,
-            @PluginAttribute("includeLocation") final String includeLocation,
-            @PluginElement("AppenderRef") final AppenderRef[] refs,
-            @PluginElement("Properties") final Property[] properties,
+            @PluginAttribute final String includeLocation,
+            @PluginElement final AppenderRef[] refs,
+            @PluginElement final Property[] properties,
             @PluginConfiguration final Configuration config,
-            @PluginElement("Filter") final Filter filter) {
+            @PluginElement final Filter filter) {
         final String name = loggerName.equals(ROOT) ? Strings.EMPTY : loggerName;
         return new AsyncLoggerConfig(name, Arrays.asList(refs), filter, level, additivity, properties, config,
                 includeLocation(includeLocation));
@@ -237,13 +237,13 @@ public class AsyncLoggerConfig extends LoggerConfig {
          */
         @PluginFactory
         public static LoggerConfig createLogger(
-                @PluginAttribute("additivity") final String additivity,
-                @PluginAttribute("level") final Level level,
-                @PluginAttribute("includeLocation") final String includeLocation,
-                @PluginElement("AppenderRef") final AppenderRef[] refs,
-                @PluginElement("Properties") final Property[] properties,
+                @PluginAttribute final String additivity,
+                @PluginAttribute final Level level,
+                @PluginAttribute final String includeLocation,
+                @PluginElement final AppenderRef[] refs,
+                @PluginElement final Property[] properties,
                 @PluginConfiguration final Configuration config,
-                @PluginElement("Filter") final Filter filter) {
+                @PluginElement final Filter filter) {
             final List<AppenderRef> appenderRefs = Arrays.asList(refs);
             final Level actualLevel = level == null ? Level.ERROR : level;
             final boolean additive = Booleans.parseBoolean(additivity, true);
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/DisruptorBlockingQueueFactory.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/DisruptorBlockingQueueFactory.java
index 66bd78a..766daf6 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/DisruptorBlockingQueueFactory.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/DisruptorBlockingQueueFactory.java
@@ -46,7 +46,7 @@ public class DisruptorBlockingQueueFactory<E> implements BlockingQueueFactory<E>
 
     @PluginFactory
     public static <E> DisruptorBlockingQueueFactory<E> createFactory(
-        @PluginAttribute(value = "SpinPolicy", defaultString = "WAITING") final SpinPolicy spinPolicy
+        @PluginAttribute(defaultString = "WAITING") final SpinPolicy spinPolicy
     ) {
         return new DisruptorBlockingQueueFactory<>(spinPolicy);
     }
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/JCToolsBlockingQueueFactory.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/JCToolsBlockingQueueFactory.java
index c3517c3..9333611 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/JCToolsBlockingQueueFactory.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/JCToolsBlockingQueueFactory.java
@@ -48,7 +48,7 @@ public class JCToolsBlockingQueueFactory<E> implements BlockingQueueFactory<E> {
 
     @PluginFactory
     public static <E> JCToolsBlockingQueueFactory<E> createFactory(
-        @PluginAttribute(value = "WaitStrategy", defaultString = "PARK") final WaitStrategy waitStrategy) {
+        @PluginAttribute(defaultString = "PARK") final WaitStrategy waitStrategy) {
         return new JCToolsBlockingQueueFactory<>(waitStrategy);
     }
 
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AppenderRef.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AppenderRef.java
index eee3c01..04a932b 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AppenderRef.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AppenderRef.java
@@ -17,7 +17,6 @@
 package org.apache.logging.log4j.core.config;
 
 import org.apache.logging.log4j.Level;
-import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.Filter;
 import org.apache.logging.log4j.plugins.Node;
 import org.apache.logging.log4j.plugins.Plugin;
@@ -25,7 +24,7 @@ import org.apache.logging.log4j.plugins.PluginAliases;
 import org.apache.logging.log4j.plugins.PluginAttribute;
 import org.apache.logging.log4j.plugins.PluginElement;
 import org.apache.logging.log4j.plugins.PluginFactory;
-import org.apache.logging.log4j.status.StatusLogger;
+import org.apache.logging.log4j.plugins.validation.constraints.Required;
 
 /**
  * An Appender reference.
@@ -33,7 +32,6 @@ import org.apache.logging.log4j.status.StatusLogger;
 @Plugin(name = "AppenderRef", category = Node.CATEGORY, printObject = true)
 @PluginAliases("appender-ref")
 public final class AppenderRef {
-    private static final Logger LOGGER = StatusLogger.getLogger();
 
     private final String ref;
     private final Level level;
@@ -71,14 +69,9 @@ public final class AppenderRef {
      */
     @PluginFactory
     public static AppenderRef createAppenderRef(
-            @PluginAttribute("ref") final String ref,
-            @PluginAttribute("level") final Level level,
-            @PluginElement("Filter") final Filter filter) {
-
-        if (ref == null) {
-            LOGGER.error("Appender references must contain a reference");
-            return null;
-        }
+            @PluginAttribute @Required(message = "Appender references must contain a reference") final String ref,
+            @PluginAttribute final Level level,
+            @PluginElement final Filter filter) {
         return new AppenderRef(ref, level, filter);
     }
 }
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/CustomLevelConfig.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/CustomLevelConfig.java
index 2194617..d54a9f0 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/CustomLevelConfig.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/CustomLevelConfig.java
@@ -50,7 +50,7 @@ public final class CustomLevelConfig {
     @PluginFactory
     public static CustomLevelConfig createLevel(// @formatter:off
             @PluginAttribute("name") final String levelName,
-            @PluginAttribute("intLevel") final int intLevel) {
+            @PluginAttribute final int intLevel) {
         // @formatter:on
 
         StatusLogger.getLogger().debug("Creating CustomLevel(name='{}', intValue={})", levelName, intLevel);
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/LoggerConfig.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/LoggerConfig.java
index a4e08ee..4170f42 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/LoggerConfig.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/LoggerConfig.java
@@ -531,14 +531,14 @@ public class LoggerConfig extends AbstractFilterable {
     @PluginFactory
     public static LoggerConfig createLogger(
          // @formatter:off
-        @PluginAttribute(value = "additivity", defaultBoolean = true) final boolean additivity,
-        @PluginAttribute("level") final Level level,
+        @PluginAttribute(defaultBoolean = true) final boolean additivity,
+        @PluginAttribute final Level level,
         @Required(message = "Loggers cannot be configured without a name") @PluginAttribute("name") final String loggerName,
-        @PluginAttribute("includeLocation") final String includeLocation,
-        @PluginElement("AppenderRef") final AppenderRef[] refs,
-        @PluginElement("Properties") final Property[] properties,
+        @PluginAttribute final String includeLocation,
+        @PluginElement final AppenderRef[] refs,
+        @PluginElement final Property[] properties,
         @PluginConfiguration final Configuration config,
-        @PluginElement("Filter") final Filter filter
+        @PluginElement final Filter filter
         // @formatter:on
     ) {
         final String name = loggerName.equals(ROOT) ? Strings.EMPTY : loggerName;
@@ -576,13 +576,13 @@ public class LoggerConfig extends AbstractFilterable {
         @PluginFactory
         public static LoggerConfig createLogger(
                 // @formatter:off
-                @PluginAttribute("additivity") final String additivity,
-                @PluginAttribute("level") final Level level,
-                @PluginAttribute("includeLocation") final String includeLocation,
-                @PluginElement("AppenderRef") final AppenderRef[] refs,
-                @PluginElement("Properties") final Property[] properties,
+                @PluginAttribute final String additivity,
+                @PluginAttribute final Level level,
+                @PluginAttribute final String includeLocation,
+                @PluginElement final AppenderRef[] refs,
+                @PluginElement final Property[] properties,
                 @PluginConfiguration final Configuration config,
-                @PluginElement("Filter") final Filter filter) {
+                @PluginElement final Filter filter) {
                 // @formatter:on
             final List<AppenderRef> appenderRefs = Arrays.asList(refs);
             final Level actualLevel = level == null ? Level.ERROR : level;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/Property.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/Property.java
index 53cf84e..5e180f1 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/Property.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/Property.java
@@ -18,13 +18,12 @@ package org.apache.logging.log4j.core.config;
 
 import java.util.Objects;
 
-import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.plugins.Node;
 import org.apache.logging.log4j.plugins.Plugin;
 import org.apache.logging.log4j.plugins.PluginAttribute;
 import org.apache.logging.log4j.plugins.PluginFactory;
 import org.apache.logging.log4j.plugins.PluginValue;
-import org.apache.logging.log4j.status.StatusLogger;
+import org.apache.logging.log4j.plugins.validation.constraints.Required;
 import org.apache.logging.log4j.util.Strings;
 
 /**
@@ -38,8 +37,6 @@ public final class Property {
      */
     public static final Property[] EMPTY_ARRAY = new Property[0];
 
-    private static final Logger LOGGER = StatusLogger.getLogger();
-
     private final String name;
     private final String value;
     private final boolean valueNeedsLookup;
@@ -83,11 +80,8 @@ public final class Property {
      */
     @PluginFactory
     public static Property createProperty(
-            @PluginAttribute("name") final String name,
-            @PluginValue("value") final String value) {
-        if (name == null) {
-            LOGGER.error("Property name cannot be null");
-        }
+            @PluginAttribute @Required(message = "Property name cannot be null") final String name,
+            @PluginValue final String value) {
         return new Property(name, value);
     }
 
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/DynamicThresholdFilter.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/DynamicThresholdFilter.java
index 738f49a..40738d3 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/DynamicThresholdFilter.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/DynamicThresholdFilter.java
@@ -59,11 +59,11 @@ public final class DynamicThresholdFilter extends AbstractFilter {
     // TODO Consider refactoring to use AbstractFilter.AbstractFilterBuilder
     @PluginFactory
     public static DynamicThresholdFilter createFilter(
-            @PluginAttribute("key") final String key,
-            @PluginElement("Pairs") final KeyValuePair[] pairs,
-            @PluginAttribute("defaultThreshold") final Level defaultThreshold,
-            @PluginAttribute("onMatch") final Result onMatch,
-            @PluginAttribute("onMismatch") final Result onMismatch) {
+            @PluginAttribute final String key,
+            @PluginElement final KeyValuePair[] pairs,
+            @PluginAttribute final Level defaultThreshold,
+            @PluginAttribute final Result onMatch,
+            @PluginAttribute final Result onMismatch) {
         final Map<String, Level> map = new HashMap<>();
         for (final KeyValuePair pair : pairs) {
             map.put(pair.getKey(), Level.toLevel(pair.getValue()));
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/LevelRangeFilter.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/LevelRangeFilter.java
index 983873c..99d80a0 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/LevelRangeFilter.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/LevelRangeFilter.java
@@ -59,10 +59,10 @@ public final class LevelRangeFilter extends AbstractFilter {
     @PluginFactory
     public static LevelRangeFilter createFilter(
             // @formatter:off
-            @PluginAttribute("minLevel") final Level minLevel,
-            @PluginAttribute("maxLevel") final Level maxLevel,
-            @PluginAttribute("onMatch") final Result match,
-            @PluginAttribute("onMismatch") final Result mismatch) {
+            @PluginAttribute final Level minLevel,
+            @PluginAttribute final Level maxLevel,
+            @PluginAttribute final Result match,
+            @PluginAttribute final Result mismatch) {
             // @formatter:on
         final Level actualMinLevel = minLevel == null ? Level.ERROR : minLevel;
         final Level actualMaxLevel = maxLevel == null ? Level.ERROR : maxLevel;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/MapFilter.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/MapFilter.java
index 7f64384..b5e9ba0 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/MapFilter.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/MapFilter.java
@@ -224,10 +224,10 @@ public class MapFilter extends AbstractFilter {
     // TODO Consider refactoring to use AbstractFilter.AbstractFilterBuilder
     @PluginFactory
     public static MapFilter createFilter(
-            @PluginElement("Pairs") final KeyValuePair[] pairs,
-            @PluginAttribute("operator") final String oper,
-            @PluginAttribute("onMatch") final Result match,
-            @PluginAttribute("onMismatch") final Result mismatch) {
+            @PluginElement final KeyValuePair[] pairs,
+            @PluginAttribute final String operator,
+            @PluginAttribute final Result onMatch,
+            @PluginAttribute final Result onMismatch) {
         if (pairs == null || pairs.length == 0) {
             LOGGER.error("keys and values must be specified for the MapFilter");
             return null;
@@ -257,7 +257,7 @@ public class MapFilter extends AbstractFilter {
             LOGGER.error("MapFilter is not configured with any valid key value pairs");
             return null;
         }
-        final boolean isAnd = oper == null || !oper.equalsIgnoreCase("or");
-        return new MapFilter(map, isAnd, match, mismatch);
+        final boolean isAnd = operator == null || !operator.equalsIgnoreCase("or");
+        return new MapFilter(map, isAnd, onMatch, onMismatch);
     }
 }
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/MarkerFilter.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/MarkerFilter.java
index 5d63518..d83eeae 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/MarkerFilter.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/MarkerFilter.java
@@ -36,7 +36,6 @@ import org.apache.logging.log4j.util.PerformanceSensitive;
 @PerformanceSensitive("allocation")
 public final class MarkerFilter extends AbstractFilter {
 
-    public static final String ATTR_MARKER = "marker";
     private final String name;
 
     private MarkerFilter(final String name, final Result onMatch, final Result onMismatch) {
@@ -148,22 +147,22 @@ public final class MarkerFilter extends AbstractFilter {
     /**
      * Creates the MarkerFilter.
      * @param marker The Marker name to match.
-     * @param match The action to take if a match occurs.
-     * @param mismatch The action to take if no match occurs.
+     * @param onMatch The action to take if a match occurs.
+     * @param onMismatch The action to take if no match occurs.
      * @return A MarkerFilter.
      */
     // TODO Consider refactoring to use AbstractFilter.AbstractFilterBuilder
     @PluginFactory
     public static MarkerFilter createFilter(
-            @PluginAttribute(ATTR_MARKER) final String marker,
-            @PluginAttribute(AbstractFilterBuilder.ATTR_ON_MATCH) final Result match,
-            @PluginAttribute(AbstractFilterBuilder.ATTR_ON_MISMATCH) final Result mismatch) {
+            @PluginAttribute final String marker,
+            @PluginAttribute final Result onMatch,
+            @PluginAttribute final Result onMismatch) {
 
         if (marker == null) {
             LOGGER.error("A marker must be provided for MarkerFilter");
             return null;
         }
-        return new MarkerFilter(marker, match, mismatch);
+        return new MarkerFilter(marker, onMatch, onMismatch);
     }
 
 }
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/RegexFilter.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/RegexFilter.java
index 6603fbf..f5c87ac 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/RegexFilter.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/RegexFilter.java
@@ -110,9 +110,9 @@ public final class RegexFilter extends AbstractFilter {
      *        An array of Strings where each String is a {@link Pattern#compile(String, int)} compilation flag.
      * @param useRawMsg
      *        If true, the raw message will be used, otherwise the formatted message will be used.
-     * @param match
+     * @param onMatch
      *        The action to perform when a match occurs.
-     * @param mismatch
+     * @param onMismatch
      *        The action to perform when a mismatch occurs.
      * @return The RegexFilter.
      * @throws IllegalAccessException
@@ -122,18 +122,18 @@ public final class RegexFilter extends AbstractFilter {
     @PluginFactory
     public static RegexFilter createFilter(
             //@formatter:off
-            @PluginAttribute("regex") final String regex,
-            @PluginElement("PatternFlags") final String[] patternFlags,
-            @PluginAttribute("useRawMsg") final Boolean useRawMsg,
-            @PluginAttribute("onMatch") final Result match,
-            @PluginAttribute("onMismatch") final Result mismatch)
+            @PluginAttribute final String regex,
+            @PluginElement final String[] patternFlags,
+            @PluginAttribute final Boolean useRawMsg,
+            @PluginAttribute final Result onMatch,
+            @PluginAttribute final Result onMismatch)
             //@formatter:on
             throws IllegalArgumentException, IllegalAccessException {
         if (regex == null) {
             LOGGER.error("A regular expression must be provided for RegexFilter");
             return null;
         }
-        return new RegexFilter(useRawMsg, Pattern.compile(regex, toPatternFlags(patternFlags)), match, mismatch);
+        return new RegexFilter(useRawMsg, Pattern.compile(regex, toPatternFlags(patternFlags)), onMatch, onMismatch);
     }
 
     private static int toPatternFlags(final String[] patternFlags) throws IllegalArgumentException,
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/ScriptFilter.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/ScriptFilter.java
index 31086e0..a911d00 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/ScriptFilter.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/ScriptFilter.java
@@ -125,17 +125,17 @@ public final class ScriptFilter extends AbstractFilter {
      * Creates the ScriptFilter.
      * @param script The script to run. The script must return a boolean value. Either script or scriptFile must be 
      *      provided.
-     * @param match The action to take if a match occurs.
-     * @param mismatch The action to take if no match occurs.
+     * @param onMatch The action to take if a match occurs.
+     * @param onMismatch The action to take if no match occurs.
      * @param configuration the configuration 
      * @return A ScriptFilter.
      */
     // TODO Consider refactoring to use AbstractFilter.AbstractFilterBuilder
     @PluginFactory
     public static ScriptFilter createFilter(
-            @PluginElement("Script") final AbstractScript script,
-            @PluginAttribute("onMatch") final Result match,
-            @PluginAttribute("onMismatch") final Result mismatch,
+            @PluginElement final AbstractScript script,
+            @PluginAttribute final Result onMatch,
+            @PluginAttribute final Result onMismatch,
             @PluginConfiguration final Configuration configuration) {
 
         if (script == null) {
@@ -149,7 +149,7 @@ public final class ScriptFilter extends AbstractFilter {
             }
         }
 
-        return new ScriptFilter(script, configuration, match, mismatch);
+        return new ScriptFilter(script, configuration, onMatch, onMismatch);
     }
 
 }
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/StructuredDataFilter.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/StructuredDataFilter.java
index d806869..c3b2684 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/StructuredDataFilter.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/StructuredDataFilter.java
@@ -149,18 +149,18 @@ public final class StructuredDataFilter extends MapFilter {
     /**
      * Creates the StructuredDataFilter.
      * @param pairs Key and value pairs.
-     * @param oper The operator to perform. If not "or" the operation will be an "and".
-     * @param match The action to perform on a match.
-     * @param mismatch The action to perform on a mismatch.
+     * @param operator The operator to perform. If not "or" the operation will be an "and".
+     * @param onMatch The action to perform on a match.
+     * @param onMismatch The action to perform on a mismatch.
      * @return The StructuredDataFilter.
      */
     // TODO Consider refactoring to use AbstractFilter.AbstractFilterBuilder
     @PluginFactory
     public static StructuredDataFilter createFilter(
-            @PluginElement("Pairs") final KeyValuePair[] pairs,
-            @PluginAttribute("operator") final String oper,
-            @PluginAttribute("onMatch") final Result match,
-            @PluginAttribute("onMismatch") final Result mismatch) {
+            @PluginElement final KeyValuePair[] pairs,
+            @PluginAttribute final String operator,
+            @PluginAttribute final Result onMatch,
+            @PluginAttribute final Result onMismatch) {
         if (pairs == null || pairs.length == 0) {
             LOGGER.error("keys and values must be specified for the StructuredDataFilter");
             return null;
@@ -190,7 +190,7 @@ public final class StructuredDataFilter extends MapFilter {
             LOGGER.error("StructuredDataFilter is not configured with any valid key value pairs");
             return null;
         }
-        final boolean isAnd = oper == null || !oper.equalsIgnoreCase("or");
-        return new StructuredDataFilter(map, isAnd, match, mismatch);
+        final boolean isAnd = operator == null || !operator.equalsIgnoreCase("or");
+        return new StructuredDataFilter(map, isAnd, onMatch, onMismatch);
     }
 }
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/ThreadContextMapFilter.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/ThreadContextMapFilter.java
index 22b2f94..5f4beb7 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/ThreadContextMapFilter.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/ThreadContextMapFilter.java
@@ -197,10 +197,10 @@ public class ThreadContextMapFilter extends MapFilter {
     // TODO Consider refactoring to use AbstractFilter.AbstractFilterBuilder
     @PluginFactory
     public static ThreadContextMapFilter createFilter(
-            @PluginElement("Pairs") final KeyValuePair[] pairs,
-            @PluginAttribute("operator") final String oper,
-            @PluginAttribute("onMatch") final Result match,
-            @PluginAttribute("onMismatch") final Result mismatch) {
+            @PluginElement final KeyValuePair[] pairs,
+            @PluginAttribute final String operator,
+            @PluginAttribute final Result onMatch,
+            @PluginAttribute final Result onMismatch) {
         if (pairs == null || pairs.length == 0) {
             LOGGER.error("key and value pairs must be specified for the ThreadContextMapFilter");
             return null;
@@ -230,7 +230,7 @@ public class ThreadContextMapFilter extends MapFilter {
             LOGGER.error("ThreadContextMapFilter is not configured with any valid key value pairs");
             return null;
         }
-        final boolean isAnd = oper == null || !oper.equalsIgnoreCase("or");
-        return new ThreadContextMapFilter(map, isAnd, match, mismatch);
+        final boolean isAnd = operator == null || !operator.equalsIgnoreCase("or");
+        return new ThreadContextMapFilter(map, isAnd, onMatch, onMismatch);
     }
 }
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/ThresholdFilter.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/ThresholdFilter.java
index db6f99a..76befe0 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/ThresholdFilter.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/ThresholdFilter.java
@@ -162,7 +162,7 @@ public final class ThresholdFilter extends AbstractFilter {
     // TODO Consider refactoring to use AbstractFilter.AbstractFilterBuilder
     @PluginFactory
     public static ThresholdFilter createFilter(
-            @PluginAttribute("level") final Level level,
+            @PluginAttribute final Level level,
             @PluginAttribute("onMatch") final Result match,
             @PluginAttribute("onMismatch") final Result mismatch) {
         final Level actualLevel = level == null ? Level.ERROR : level;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/TimeFilter.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/TimeFilter.java
index 1fe61d3..2c675ca 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/TimeFilter.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/TimeFilter.java
@@ -231,8 +231,8 @@ public final class TimeFilter extends AbstractFilter {
     // TODO Consider refactoring to use AbstractFilter.AbstractFilterBuilder
     @PluginFactory
     public static TimeFilter createFilter(
-            @PluginAttribute("start") final String start,
-            @PluginAttribute("end") final String end,
+            @PluginAttribute final String start,
+            @PluginAttribute final String end,
             @PluginAttribute("timezone") final String tz,
             @PluginAttribute("onMatch") final Result match,
             @PluginAttribute("onMismatch") final Result mismatch) {
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/HtmlLayout.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/HtmlLayout.java
index dd4843e..cbfa59a 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/HtmlLayout.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/HtmlLayout.java
@@ -340,11 +340,11 @@ public final class HtmlLayout extends AbstractStringLayout {
      */
     @PluginFactory
     public static HtmlLayout createLayout(
-            @PluginAttribute(value = "locationInfo") final boolean locationInfo,
-            @PluginAttribute(value = "title", defaultString = DEFAULT_TITLE) final String title,
-            @PluginAttribute("contentType") String contentType,
-            @PluginAttribute(value = "charset", defaultString = "UTF-8") final Charset charset,
-            @PluginAttribute("fontSize") String fontSize,
+            @PluginAttribute final boolean locationInfo,
+            @PluginAttribute(defaultString = DEFAULT_TITLE) final String title,
+            @PluginAttribute String contentType,
+            @PluginAttribute(defaultString = "UTF-8") final Charset charset,
+            @PluginAttribute String fontSize,
             @PluginAttribute(value = "fontName", defaultString = DEFAULT_FONT_FAMILY) final String font) {
         final FontSize fs = FontSize.getFontSize(fontSize);
         fontSize = fs.getFontSize();
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/LoggerFields.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/LoggerFields.java
index 0995c69..6218bab 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/LoggerFields.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/LoggerFields.java
@@ -71,10 +71,10 @@ public final class LoggerFields {
      */
     @PluginFactory
     public static LoggerFields createLoggerFields(
-        @PluginElement("LoggerFields") final KeyValuePair[] keyValuePairs,
-        @PluginAttribute("sdId") final String sdId,
-        @PluginAttribute("enterpriseId") final String enterpriseId,
-        @PluginAttribute(value = "discardIfAllFieldsAreEmpty") final boolean discardIfAllFieldsAreEmpty) {
+        @PluginElement final KeyValuePair[] keyValuePairs,
+        @PluginAttribute final String sdId,
+        @PluginAttribute final String enterpriseId,
+        @PluginAttribute final boolean discardIfAllFieldsAreEmpty) {
         final Map<String, String> map = new HashMap<>();
 
         for (final KeyValuePair keyValuePair : keyValuePairs) {
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/Rfc5424Layout.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/Rfc5424Layout.java
index aae47ea..9584c18 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/Rfc5424Layout.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/Rfc5424Layout.java
@@ -643,25 +643,24 @@ public final class Rfc5424Layout extends AbstractStringLayout {
     @PluginFactory
     public static Rfc5424Layout createLayout(
             // @formatter:off
-            @PluginAttribute(value = "facility", defaultString = "LOCAL0") final Facility facility,
-            @PluginAttribute("id") final String id,
-            @PluginAttribute(value = "enterpriseNumber", defaultInt = DEFAULT_ENTERPRISE_NUMBER)
-            final int enterpriseNumber,
-            @PluginAttribute(value = "includeMDC", defaultBoolean = true) final boolean includeMDC,
-            @PluginAttribute(value = "mdcId", defaultString = DEFAULT_MDCID) final String mdcId,
-            @PluginAttribute("mdcPrefix") final String mdcPrefix,
-            @PluginAttribute("eventPrefix") final String eventPrefix,
-            @PluginAttribute(value = "newLine") final boolean newLine,
+            @PluginAttribute(defaultString = "LOCAL0") final Facility facility,
+            @PluginAttribute final String id,
+            @PluginAttribute(defaultInt = DEFAULT_ENTERPRISE_NUMBER) final int enterpriseNumber,
+            @PluginAttribute(defaultBoolean = true) final boolean includeMDC,
+            @PluginAttribute(defaultString = DEFAULT_MDCID) final String mdcId,
+            @PluginAttribute final String mdcPrefix,
+            @PluginAttribute final String eventPrefix,
+            @PluginAttribute final boolean newLine,
             @PluginAttribute("newLineEscape") final String escapeNL,
-            @PluginAttribute("appName") final String appName,
+            @PluginAttribute final String appName,
             @PluginAttribute("messageId") final String msgId,
             @PluginAttribute("mdcExcludes") final String excludes,
             @PluginAttribute("mdcIncludes") String includes,
             @PluginAttribute("mdcRequired") final String required,
-            @PluginAttribute("exceptionPattern") final String exceptionPattern,
+            @PluginAttribute final String exceptionPattern,
             // RFC 5425
-            @PluginAttribute(value = "useTlsMessageFormat") final boolean useTlsMessageFormat,
-            @PluginElement("LoggerFields") final LoggerFields[] loggerFields,
+            @PluginAttribute final boolean useTlsMessageFormat,
+            @PluginElement final LoggerFields[] loggerFields,
             @PluginConfiguration final Configuration config) {
         // @formatter:on
         if (includes != null && excludes != null) {
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/ssl/KeyStoreConfiguration.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/ssl/KeyStoreConfiguration.java
index b58c91d..abe1e25 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/ssl/KeyStoreConfiguration.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/ssl/KeyStoreConfiguration.java
@@ -94,12 +94,12 @@ public class KeyStoreConfiguration extends AbstractKeyStoreConfiguration {
     @PluginFactory
     public static KeyStoreConfiguration createKeyStoreConfiguration(
             // @formatter:off
-            @PluginAttribute("location") final String location,
-            @PluginAttribute(value = "password", sensitive = true) final char[] password,
-            @PluginAttribute("passwordEnvironmentVariable") final String passwordEnvironmentVariable,
-            @PluginAttribute("passwordFile") final String passwordFile,
+            @PluginAttribute final String location,
+            @PluginAttribute(sensitive = true) final char[] password,
+            @PluginAttribute final String passwordEnvironmentVariable,
+            @PluginAttribute final String passwordFile,
             @PluginAttribute("type") final String keyStoreType,
-            @PluginAttribute("keyManagerFactoryAlgorithm") final String keyManagerFactoryAlgorithm) throws StoreConfigurationException {
+            @PluginAttribute final String keyManagerFactoryAlgorithm) throws StoreConfigurationException {
             // @formatter:on
 
         if (password != null && passwordEnvironmentVariable != null && passwordFile != null) {
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/ssl/SslConfiguration.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/ssl/SslConfiguration.java
index 118f2b8..466f693 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/ssl/SslConfiguration.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/ssl/SslConfiguration.java
@@ -230,9 +230,9 @@ public class SslConfiguration {
     @PluginFactory
     public static SslConfiguration createSSLConfiguration(
             // @formatter:off
-            @PluginAttribute("protocol") final String protocol,
-            @PluginElement("KeyStore") final KeyStoreConfiguration keyStoreConfig, 
-            @PluginElement("TrustStore") final TrustStoreConfiguration trustStoreConfig) {
+            @PluginAttribute final String protocol,
+            @PluginElement final KeyStoreConfiguration keyStoreConfig,
+            @PluginElement final TrustStoreConfiguration trustStoreConfig) {
             // @formatter:on
         return new SslConfiguration(protocol, keyStoreConfig, trustStoreConfig, false);
     }
@@ -248,10 +248,10 @@ public class SslConfiguration {
      */
     public static SslConfiguration createSSLConfiguration(
             // @formatter:off
-            @PluginAttribute("protocol") final String protocol,
-            @PluginElement("KeyStore") final KeyStoreConfiguration keyStoreConfig,
-            @PluginElement("TrustStore") final TrustStoreConfiguration trustStoreConfig,
-            @PluginElement("verifyHostName") final boolean verifyHostName) {
+            @PluginAttribute final String protocol,
+            @PluginElement final KeyStoreConfiguration keyStoreConfig,
+            @PluginElement final TrustStoreConfiguration trustStoreConfig,
+            @PluginElement final boolean verifyHostName) {
         // @formatter:on
         return new SslConfiguration(protocol, keyStoreConfig, trustStoreConfig, verifyHostName);
     }
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/ssl/TrustStoreConfiguration.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/ssl/TrustStoreConfiguration.java
index d64dcca..17cbe51 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/ssl/TrustStoreConfiguration.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/ssl/TrustStoreConfiguration.java
@@ -73,12 +73,12 @@ public class TrustStoreConfiguration extends AbstractKeyStoreConfiguration {
     @PluginFactory
     public static TrustStoreConfiguration createKeyStoreConfiguration(
             // @formatter:off
-            @PluginAttribute("location") final String location,
-            @PluginAttribute(value = "password", sensitive = true) final char[] password,
-            @PluginAttribute("passwordEnvironmentVariable") final String passwordEnvironmentVariable,
-            @PluginAttribute("passwordFile") final String passwordFile,
+            @PluginAttribute final String location,
+            @PluginAttribute(sensitive = true) final char[] password,
+            @PluginAttribute final String passwordEnvironmentVariable,
+            @PluginAttribute final String passwordFile,
             @PluginAttribute("type") final String keyStoreType,
-            @PluginAttribute("trustManagerFactoryAlgorithm") final String trustManagerFactoryAlgorithm) throws StoreConfigurationException {
+            @PluginAttribute final String trustManagerFactoryAlgorithm) throws StoreConfigurationException {
             // @formatter:on
 
         if (password != null && passwordEnvironmentVariable != null && passwordFile != null) {
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/RegexReplacement.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/RegexReplacement.java
index 602048a..0d6961b 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/RegexReplacement.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/RegexReplacement.java
@@ -70,8 +70,8 @@ public final class RegexReplacement {
      */
     @PluginFactory
     public static RegexReplacement createRegexReplacement(
-            @PluginAttribute("regex") final Pattern regex,
-            @PluginAttribute("replacement") final String replacement) {
+            @PluginAttribute final Pattern regex,
+            @PluginAttribute final String replacement) {
         if (regex == null) {
             LOGGER.error("A regular expression is required for replacement");
             return null;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/script/Script.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/script/Script.java
index 15b2096..b51eb37 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/script/Script.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/script/Script.java
@@ -39,9 +39,9 @@ public class Script extends AbstractScript {
     @PluginFactory
     public static Script createScript(
             // @formatter:off
-            @PluginAttribute("name") final String name,
-            @PluginAttribute(ATTR_LANGUAGE) String language,
-            @PluginValue(ATTR_SCRIPT_TEXT) final String scriptText) {
+            @PluginAttribute final String name,
+            @PluginAttribute String language,
+            @PluginValue final String scriptText) {
             // @formatter:on
         if (language == null) {
             LOGGER.error("No '{}' attribute provided for {} plugin '{}'", ATTR_LANGUAGE, PLUGIN_NAME, name);
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/script/ScriptFile.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/script/ScriptFile.java
index d2a5863a..097c191 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/script/ScriptFile.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/script/ScriptFile.java
@@ -62,11 +62,11 @@ public class ScriptFile extends AbstractScript {
     @PluginFactory
     public static ScriptFile createScript(
             // @formatter:off
-            @PluginAttribute("name") String name,
-            @PluginAttribute("language") String language,
+            @PluginAttribute String name,
+            @PluginAttribute String language,
             @PluginAttribute("path") final String filePathOrUri,
-            @PluginAttribute("isWatched") final Boolean isWatched,
-            @PluginAttribute("charset") final Charset charset) {
+            @PluginAttribute final Boolean isWatched,
+            @PluginAttribute final Charset charset) {
             // @formatter:on
         if (filePathOrUri == null) {
             LOGGER.error("No script path provided for ScriptFile");
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/HangingAppender.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/HangingAppender.java
index 785e9a5..a371c49 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/HangingAppender.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/HangingAppender.java
@@ -58,14 +58,14 @@ public class HangingAppender extends AbstractAppender {
 
     @PluginFactory
     public static HangingAppender createAppender(
-            @PluginAttribute("name")
+            @PluginAttribute
             @Required(message = "No name provided for HangingAppender")
             final String name,
-            @PluginAttribute("delay") final long delay,
-            @PluginAttribute("startupDelay") final long startupDelay,
-            @PluginAttribute("shutdownDelay") final long shutdownDelay,
-            @PluginElement("Layout") final Layout<? extends Serializable> layout,
-            @PluginElement("Filter") final Filter filter) {
+            @PluginAttribute final long delay,
+            @PluginAttribute final long startupDelay,
+            @PluginAttribute final long shutdownDelay,
+            @PluginElement final Layout<? extends Serializable> layout,
+            @PluginElement final Filter filter) {
         return new HangingAppender(name, delay, startupDelay, shutdownDelay);
     }
 
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/async/BlockingAppender.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/async/BlockingAppender.java
index 209dbe8..2db6368 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/async/BlockingAppender.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/async/BlockingAppender.java
@@ -71,11 +71,11 @@ public class BlockingAppender extends AbstractAppender {
 
     @PluginFactory
     public static BlockingAppender createAppender(
-            @PluginAttribute("name")
+            @PluginAttribute
             @Required(message = "No name provided for HangingAppender")
             final String name,
-            @PluginElement("Layout") final Layout<? extends Serializable> layout,
-            @PluginElement("Filter") final Filter filter) {
+            @PluginElement final Layout<? extends Serializable> layout,
+            @PluginElement final Filter filter) {
         return new BlockingAppender(name);
     }
 
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/test/appender/AlwaysFailAppender.java b/log4j-core/src/test/java/org/apache/logging/log4j/test/appender/AlwaysFailAppender.java
index 5572605..380dfe5 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/test/appender/AlwaysFailAppender.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/test/appender/AlwaysFailAppender.java
@@ -42,7 +42,7 @@ public class AlwaysFailAppender extends AbstractAppender {
 
     @PluginFactory
     public static AlwaysFailAppender createAppender(
-        @PluginAttribute("name") @Required(message = "A name for the Appender must be specified") final String name) {
+        @PluginAttribute @Required(message = "A name for the Appender must be specified") final String name) {
         return new AlwaysFailAppender(name);
     }
 
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/test/appender/BlockingAppender.java b/log4j-core/src/test/java/org/apache/logging/log4j/test/appender/BlockingAppender.java
index 23cd489..922f50b 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/test/appender/BlockingAppender.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/test/appender/BlockingAppender.java
@@ -59,7 +59,7 @@ public class BlockingAppender extends AbstractAppender {
 
     @PluginFactory
     public static BlockingAppender createAppender(
-        @PluginAttribute("name") @Required(message = "A name for the Appender must be specified") final String name) {
+        @PluginAttribute @Required(message = "A name for the Appender must be specified") final String name) {
         return new BlockingAppender(name);
     }
 }
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/test/appender/DeadlockAppender.java b/log4j-core/src/test/java/org/apache/logging/log4j/test/appender/DeadlockAppender.java
index 34b3b39..9afd483 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/test/appender/DeadlockAppender.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/test/appender/DeadlockAppender.java
@@ -69,7 +69,7 @@ public class DeadlockAppender extends AbstractAppender {
 
     @PluginFactory
     public static DeadlockAppender createAppender(
-        @PluginAttribute("name") @Required(message = "A name for the Appender must be specified") final String name) {
+        @PluginAttribute @Required(message = "A name for the Appender must be specified") final String name) {
         return new DeadlockAppender(name);
     }
 
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/test/appender/FailOnceAppender.java b/log4j-core/src/test/java/org/apache/logging/log4j/test/appender/FailOnceAppender.java
index 8d77914..2a18bc3 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/test/appender/FailOnceAppender.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/test/appender/FailOnceAppender.java
@@ -59,7 +59,7 @@ public class FailOnceAppender extends AbstractAppender {
 
     @PluginFactory
     public static FailOnceAppender createAppender(
-        @PluginAttribute("name") @Required(message = "A name for the Appender must be specified") final String name) {
+        @PluginAttribute @Required(message = "A name for the Appender must be specified") final String name) {
         return new FailOnceAppender(name);
     }
 
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/test/appender/UsesLoggingAppender.java b/log4j-core/src/test/java/org/apache/logging/log4j/test/appender/UsesLoggingAppender.java
index da70fcf..9b4abfd 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/test/appender/UsesLoggingAppender.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/test/appender/UsesLoggingAppender.java
@@ -45,10 +45,10 @@ public final class UsesLoggingAppender extends AbstractAppender {
 
     @PluginFactory
     public static UsesLoggingAppender createAppender(
-        @PluginAttribute("name") @Required(message = "A name for the Appender must be specified") final String name,
+        @PluginAttribute @Required(message = "A name for the Appender must be specified") final String name,
         @PluginAttribute("ignoreExceptions") final boolean ignore,
-        @PluginElement("Layout") final Layout<?> layout,
-        @PluginElement("Filter") final Filter filter) {
+        @PluginElement final Layout<?> layout,
+        @PluginElement final Filter filter) {
         return new UsesLoggingAppender(name, filter, layout, ignore);
     }
 
diff --git a/log4j-couchdb/src/main/java/org/apache/logging/log4j/couchdb/CouchDbProvider.java b/log4j-couchdb/src/main/java/org/apache/logging/log4j/couchdb/CouchDbProvider.java
index 621a92d..6eb207e 100644
--- a/log4j-couchdb/src/main/java/org/apache/logging/log4j/couchdb/CouchDbProvider.java
+++ b/log4j-couchdb/src/main/java/org/apache/logging/log4j/couchdb/CouchDbProvider.java
@@ -83,14 +83,14 @@ public final class CouchDbProvider implements NoSqlProvider<CouchDbConnection> {
      */
     @PluginFactory
     public static CouchDbProvider createNoSqlProvider(
-            @PluginAttribute("databaseName") final String databaseName,
-            @PluginAttribute("protocol") String protocol,
-            @PluginAttribute(value = "server", defaultString = "localhost") @ValidHost final String server,
-            @PluginAttribute(value = "port", defaultString = "0") @ValidPort final String port,
-            @PluginAttribute("username") final String username,
-            @PluginAttribute(value = "password", sensitive = true) final String password,
-            @PluginAttribute("factoryClassName") final String factoryClassName,
-            @PluginAttribute("factoryMethodName") final String factoryMethodName) {
+            @PluginAttribute final String databaseName,
+            @PluginAttribute String protocol,
+            @PluginAttribute(defaultString = "localhost") @ValidHost final String server,
+            @PluginAttribute(defaultString = "0") @ValidPort final String port,
+            @PluginAttribute final String username,
+            @PluginAttribute(sensitive = true) final String password,
+            @PluginAttribute final String factoryClassName,
+            @PluginAttribute final String factoryMethodName) {
         CouchDbClient client;
         String description;
         if (Strings.isNotEmpty(factoryClassName) && Strings.isNotEmpty(factoryMethodName)) {
diff --git a/log4j-csv/src/main/java/org/apache/logging/log4j/csv/layout/CsvLogEventLayout.java b/log4j-csv/src/main/java/org/apache/logging/log4j/csv/layout/CsvLogEventLayout.java
index b320052..ce195ed 100644
--- a/log4j-csv/src/main/java/org/apache/logging/log4j/csv/layout/CsvLogEventLayout.java
+++ b/log4j-csv/src/main/java/org/apache/logging/log4j/csv/layout/CsvLogEventLayout.java
@@ -53,16 +53,16 @@ public class CsvLogEventLayout extends AbstractCsvLayout {
     public static CsvLogEventLayout createLayout(
             // @formatter:off
             @PluginConfiguration final Configuration config,
-            @PluginAttribute(value = "format", defaultString = DEFAULT_FORMAT) final String format,
-            @PluginAttribute("delimiter") final Character delimiter,
-            @PluginAttribute("escape") final Character escape,
-            @PluginAttribute("quote") final Character quote,
-            @PluginAttribute("quoteMode") final QuoteMode quoteMode,
-            @PluginAttribute("nullString") final String nullString,
-            @PluginAttribute("recordSeparator") final String recordSeparator,
-            @PluginAttribute(value = "charset", defaultString = DEFAULT_CHARSET) final Charset charset,
-            @PluginAttribute("header") final String header,
-            @PluginAttribute("footer") final String footer)
+            @PluginAttribute(defaultString = DEFAULT_FORMAT) final String format,
+            @PluginAttribute final Character delimiter,
+            @PluginAttribute final Character escape,
+            @PluginAttribute final Character quote,
+            @PluginAttribute final QuoteMode quoteMode,
+            @PluginAttribute final String nullString,
+            @PluginAttribute final String recordSeparator,
+            @PluginAttribute(defaultString = DEFAULT_CHARSET) final Charset charset,
+            @PluginAttribute final String header,
+            @PluginAttribute final String footer)
             // @formatter:on
     {
 
diff --git a/log4j-csv/src/main/java/org/apache/logging/log4j/csv/layout/CsvParameterLayout.java b/log4j-csv/src/main/java/org/apache/logging/log4j/csv/layout/CsvParameterLayout.java
index a8eaf0a..816271a 100644
--- a/log4j-csv/src/main/java/org/apache/logging/log4j/csv/layout/CsvParameterLayout.java
+++ b/log4j-csv/src/main/java/org/apache/logging/log4j/csv/layout/CsvParameterLayout.java
@@ -62,16 +62,16 @@ public class CsvParameterLayout extends AbstractCsvLayout {
     public static AbstractCsvLayout createLayout(
             // @formatter:off
             @PluginConfiguration final Configuration config,
-            @PluginAttribute(value = "format", defaultString = DEFAULT_FORMAT) final String format,
-            @PluginAttribute("delimiter") final Character delimiter,
-            @PluginAttribute("escape") final Character escape,
-            @PluginAttribute("quote") final Character quote,
-            @PluginAttribute("quoteMode") final QuoteMode quoteMode,
-            @PluginAttribute("nullString") final String nullString,
-            @PluginAttribute("recordSeparator") final String recordSeparator,
-            @PluginAttribute(value = "charset", defaultString = DEFAULT_CHARSET) final Charset charset,
-            @PluginAttribute("header") final String header, 
-            @PluginAttribute("footer") final String footer)
+            @PluginAttribute(defaultString = DEFAULT_FORMAT) final String format,
+            @PluginAttribute final Character delimiter,
+            @PluginAttribute final Character escape,
+            @PluginAttribute final Character quote,
+            @PluginAttribute final QuoteMode quoteMode,
+            @PluginAttribute final String nullString,
+            @PluginAttribute final String recordSeparator,
+            @PluginAttribute(defaultString = DEFAULT_CHARSET) final Charset charset,
+            @PluginAttribute final String header,
+            @PluginAttribute final String footer)
             // @formatter:on
     {
 
diff --git a/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeAppender.java b/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeAppender.java
index ac9c9a2..e2d4f06 100644
--- a/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeAppender.java
+++ b/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeAppender.java
@@ -185,32 +185,32 @@ public final class FlumeAppender extends AbstractAppender implements FlumeEventF
      * @return A Flume Avro Appender.
      */
     @PluginFactory
-    public static FlumeAppender createAppender(@PluginElement("Agents") final Agent[] agents,
-                                               @PluginElement("Properties") final Property[] properties,
-                                               @PluginAttribute("hosts") final String hosts,
-                                               @PluginAttribute("embedded") final String embedded,
-                                               @PluginAttribute("type") final String type,
-                                               @PluginAttribute("dataDir") final String dataDir,
+    public static FlumeAppender createAppender(@PluginElement final Agent[] agents,
+                                               @PluginElement final Property[] properties,
+                                               @PluginAttribute final String hosts,
+                                               @PluginAttribute final String embedded,
+                                               @PluginAttribute final String type,
+                                               @PluginAttribute final String dataDir,
                                                @PluginAliases("connectTimeout")
                                                @PluginAttribute("connectTimeoutMillis") final String connectionTimeoutMillis,
                                                @PluginAliases("requestTimeout")
-                                               @PluginAttribute("requestTimeoutMillis") final String requestTimeoutMillis,
-                                               @PluginAttribute("agentRetries") final String agentRetries,
+                                               @PluginAttribute final String requestTimeoutMillis,
+                                               @PluginAttribute final String agentRetries,
                                                @PluginAliases("maxDelay") // deprecated
-                                               @PluginAttribute("maxDelayMillis") final String maxDelayMillis,
-                                               @PluginAttribute("name") final String name,
+                                               @PluginAttribute final String maxDelayMillis,
+                                               @PluginAttribute final String name,
                                                @PluginAttribute("ignoreExceptions") final String ignore,
                                                @PluginAttribute("mdcExcludes") final String excludes,
                                                @PluginAttribute("mdcIncludes") final String includes,
                                                @PluginAttribute("mdcRequired") final String required,
-                                               @PluginAttribute("mdcPrefix") final String mdcPrefix,
-                                               @PluginAttribute("eventPrefix") final String eventPrefix,
+                                               @PluginAttribute final String mdcPrefix,
+                                               @PluginAttribute final String eventPrefix,
                                                @PluginAttribute("compress") final String compressBody,
-                                               @PluginAttribute("batchSize") final String batchSize,
-                                               @PluginAttribute("lockTimeoutRetries") final String lockTimeoutRetries,
-                                               @PluginElement("FlumeEventFactory") final FlumeEventFactory factory,
-                                               @PluginElement("Layout") Layout<? extends Serializable> layout,
-                                               @PluginElement("Filter") final Filter filter) {
+                                               @PluginAttribute final String batchSize,
+                                               @PluginAttribute final String lockTimeoutRetries,
+                                               @PluginElement final FlumeEventFactory factory,
+                                               @PluginElement Layout<? extends Serializable> layout,
+                                               @PluginElement final Filter filter) {
 
         final boolean embed = embedded != null ? Boolean.parseBoolean(embedded) :
             (agents == null || agents.length == 0 || hosts == null || hosts.isEmpty()) && properties != null && properties.length > 0;
diff --git a/log4j-jdbc/src/main/java/org/apache/logging/log4j/jdbc/appender/DataSourceConnectionSource.java b/log4j-jdbc/src/main/java/org/apache/logging/log4j/jdbc/appender/DataSourceConnectionSource.java
index ab39844..496902c 100644
--- a/log4j-jdbc/src/main/java/org/apache/logging/log4j/jdbc/appender/DataSourceConnectionSource.java
+++ b/log4j-jdbc/src/main/java/org/apache/logging/log4j/jdbc/appender/DataSourceConnectionSource.java
@@ -64,7 +64,7 @@ public final class DataSourceConnectionSource extends AbstractConnectionSource {
      * @return the created connection source.
      */
     @PluginFactory
-    public static DataSourceConnectionSource createConnectionSource(@PluginAttribute("jndiName") final String jndiName) {
+    public static DataSourceConnectionSource createConnectionSource(@PluginAttribute final String jndiName) {
         if (Strings.isEmpty(jndiName)) {
             LOGGER.error("No JNDI name provided.");
             return null;
diff --git a/log4j-jeromq/src/main/java/org/apache/logging/log4j/jeromq/appender/JeroMqAppender.java b/log4j-jeromq/src/main/java/org/apache/logging/log4j/jeromq/appender/JeroMqAppender.java
index 424d022..09ce72c 100644
--- a/log4j-jeromq/src/main/java/org/apache/logging/log4j/jeromq/appender/JeroMqAppender.java
+++ b/log4j-jeromq/src/main/java/org/apache/logging/log4j/jeromq/appender/JeroMqAppender.java
@@ -83,33 +83,33 @@ public final class JeroMqAppender extends AbstractAppender {
     @PluginFactory
     public static JeroMqAppender createAppender(
             // @formatter:off
-            @Required(message = "No name provided for JeroMqAppender") @PluginAttribute("name") final String name,
-            @PluginElement("Layout") Layout<?> layout,
-            @PluginElement("Filter") final Filter filter,
-            @PluginElement("Properties") final Property[] properties,
+            @Required(message = "No name provided for JeroMqAppender") @PluginAttribute final String name,
+            @PluginElement Layout<?> layout,
+            @PluginElement final Filter filter,
+            @PluginElement final Property[] properties,
             // Super attributes
-            @PluginAttribute("ignoreExceptions") final boolean ignoreExceptions,
+            @PluginAttribute final boolean ignoreExceptions,
             // ZMQ attributes; defaults picked from zmq.Options.
-            @PluginAttribute(value = "affinity", defaultLong = 0) final long affinity,
-            @PluginAttribute(value = "backlog", defaultLong = DEFAULT_BACKLOG) final long backlog,
-            @PluginAttribute(value = "delayAttachOnConnect") final boolean delayAttachOnConnect,
-            @PluginAttribute(value = "identity") final byte[] identity,
-            @PluginAttribute(value = "ipv4Only", defaultBoolean = true) final boolean ipv4Only,
-            @PluginAttribute(value = "linger", defaultLong = -1) final long linger,
-            @PluginAttribute(value = "maxMsgSize", defaultLong = -1) final long maxMsgSize,
-            @PluginAttribute(value = "rcvHwm", defaultLong = DEFAULT_RCV_HWM) final long rcvHwm,
-            @PluginAttribute(value = "receiveBufferSize", defaultLong = 0) final long receiveBufferSize,
-            @PluginAttribute(value = "receiveTimeOut", defaultLong = -1) final int receiveTimeOut,
-            @PluginAttribute(value = "reconnectIVL", defaultLong = DEFAULT_IVL) final long reconnectIVL,
-            @PluginAttribute(value = "reconnectIVLMax", defaultLong = 0) final long reconnectIVLMax,
-            @PluginAttribute(value = "sendBufferSize", defaultLong = 0) final long sendBufferSize,
-            @PluginAttribute(value = "sendTimeOut", defaultLong = -1) final int sendTimeOut,
-            @PluginAttribute(value = "sndHwm", defaultLong = DEFAULT_SND_HWM) final long sndHwm,
-            @PluginAttribute(value = "tcpKeepAlive", defaultInt = -1) final int tcpKeepAlive,
-            @PluginAttribute(value = "tcpKeepAliveCount", defaultLong = -1) final long tcpKeepAliveCount,
-            @PluginAttribute(value = "tcpKeepAliveIdle", defaultLong = -1) final long tcpKeepAliveIdle,
-            @PluginAttribute(value = "tcpKeepAliveInterval", defaultLong = -1) final long tcpKeepAliveInterval,
-            @PluginAttribute(value = "xpubVerbose") final boolean xpubVerbose
+            @PluginAttribute(defaultLong = 0) final long affinity,
+            @PluginAttribute(defaultLong = DEFAULT_BACKLOG) final long backlog,
+            @PluginAttribute final boolean delayAttachOnConnect,
+            @PluginAttribute final byte[] identity,
+            @PluginAttribute(defaultBoolean = true) final boolean ipv4Only,
+            @PluginAttribute(defaultLong = -1) final long linger,
+            @PluginAttribute(defaultLong = -1) final long maxMsgSize,
+            @PluginAttribute(defaultLong = DEFAULT_RCV_HWM) final long rcvHwm,
+            @PluginAttribute(defaultLong = 0) final long receiveBufferSize,
+            @PluginAttribute(defaultLong = -1) final int receiveTimeOut,
+            @PluginAttribute(defaultLong = DEFAULT_IVL) final long reconnectIVL,
+            @PluginAttribute(defaultLong = 0) final long reconnectIVLMax,
+            @PluginAttribute(defaultLong = 0) final long sendBufferSize,
+            @PluginAttribute(defaultLong = -1) final int sendTimeOut,
+            @PluginAttribute(defaultLong = DEFAULT_SND_HWM) final long sndHwm,
+            @PluginAttribute(defaultInt = -1) final int tcpKeepAlive,
+            @PluginAttribute(defaultLong = -1) final long tcpKeepAliveCount,
+            @PluginAttribute(defaultLong = -1) final long tcpKeepAliveIdle,
+            @PluginAttribute(defaultLong = -1) final long tcpKeepAliveInterval,
+            @PluginAttribute final boolean xpubVerbose
             // @formatter:on
     ) {
         if (layout == null) {
diff --git a/log4j-jpa/src/main/java/org/apache/logging/log4j/jpa/appender/JpaAppender.java b/log4j-jpa/src/main/java/org/apache/logging/log4j/jpa/appender/JpaAppender.java
index 82ef8a3..602f6e1 100644
--- a/log4j-jpa/src/main/java/org/apache/logging/log4j/jpa/appender/JpaAppender.java
+++ b/log4j-jpa/src/main/java/org/apache/logging/log4j/jpa/appender/JpaAppender.java
@@ -72,12 +72,12 @@ public final class JpaAppender extends AbstractDatabaseAppender<JpaDatabaseManag
      */
     @PluginFactory
     public static JpaAppender createAppender(
-            @PluginAttribute("name") final String name,
+            @PluginAttribute final String name,
             @PluginAttribute("ignoreExceptions") final String ignore,
-            @PluginElement("Filter") final Filter filter,
-            @PluginAttribute("bufferSize") final String bufferSize,
-            @PluginAttribute("entityClassName") final String entityClassName,
-            @PluginAttribute("persistenceUnitName") final String persistenceUnitName) {
+            @PluginElement final Filter filter,
+            @PluginAttribute final String bufferSize,
+            @PluginAttribute final String entityClassName,
+            @PluginAttribute final String persistenceUnitName) {
         if (Strings.isEmpty(entityClassName) || Strings.isEmpty(persistenceUnitName)) {
             LOGGER.error("Attributes entityClassName and persistenceUnitName are required for JPA Appender.");
             return null;
diff --git a/log4j-kafka/src/main/java/org/apache/logging/log4j/kafka/appender/KafkaAppender.java b/log4j-kafka/src/main/java/org/apache/logging/log4j/kafka/appender/KafkaAppender.java
index 718f3fb..41e3fc8 100644
--- a/log4j-kafka/src/main/java/org/apache/logging/log4j/kafka/appender/KafkaAppender.java
+++ b/log4j-kafka/src/main/java/org/apache/logging/log4j/kafka/appender/KafkaAppender.java
@@ -50,13 +50,13 @@ public final class KafkaAppender extends AbstractAppender {
     public static class Builder<B extends Builder<B>> extends AbstractAppender.Builder<B>
             implements org.apache.logging.log4j.plugins.util.Builder<KafkaAppender> {
 
-        @PluginAttribute("topic")
+        @PluginAttribute
         private String topic;
 
-        @PluginAttribute("key")
+        @PluginAttribute
         private String key;
 
-        @PluginAttribute(value = "syncSend", defaultBoolean = true)
+        @PluginAttribute(defaultBoolean = true)
         private boolean syncSend;
 
         @SuppressWarnings("resource")
diff --git a/log4j-plugins/src/test/java/org/apache/logging/log4j/plugins/validation/HostAndPort.java b/log4j-plugins/src/test/java/org/apache/logging/log4j/plugins/validation/HostAndPort.java
index 626798e..335ea49 100644
--- a/log4j-plugins/src/test/java/org/apache/logging/log4j/plugins/validation/HostAndPort.java
+++ b/log4j-plugins/src/test/java/org/apache/logging/log4j/plugins/validation/HostAndPort.java
@@ -39,8 +39,8 @@ public class HostAndPort {
 
     @PluginFactory
     public static HostAndPort createPlugin(
-        @ValidHost(message = "Unit test (host)") @PluginAttribute("host") final String host,
-        @ValidPort(message = "Unit test (port)") @PluginAttribute("port") final int port) {
+        @ValidHost(message = "Unit test (host)") @PluginAttribute final String host,
+        @ValidPort(message = "Unit test (port)") @PluginAttribute final int port) {
         return new HostAndPort(new InetSocketAddress(host, port));
     }
 
diff --git a/log4j-plugins/src/test/java/org/apache/logging/log4j/plugins/validation/PluginWithGenericSubclassFoo1Builder.java b/log4j-plugins/src/test/java/org/apache/logging/log4j/plugins/validation/PluginWithGenericSubclassFoo1Builder.java
index 6f57179..0ae991a 100644
--- a/log4j-plugins/src/test/java/org/apache/logging/log4j/plugins/validation/PluginWithGenericSubclassFoo1Builder.java
+++ b/log4j-plugins/src/test/java/org/apache/logging/log4j/plugins/validation/PluginWithGenericSubclassFoo1Builder.java
@@ -17,7 +17,7 @@
 package org.apache.logging.log4j.plugins.validation;
 
 import org.apache.logging.log4j.plugins.Plugin;
-import org.apache.logging.log4j.plugins.PluginBuilderAttribute;
+import org.apache.logging.log4j.plugins.PluginAttribute;
 import org.apache.logging.log4j.plugins.PluginFactory;
 import org.apache.logging.log4j.plugins.validation.constraints.Required;
 
@@ -27,12 +27,7 @@ public class PluginWithGenericSubclassFoo1Builder extends AbstractPluginWithGene
     public static class Builder<B extends Builder<B>> extends AbstractPluginWithGenericBuilder.Builder<B>
             implements org.apache.logging.log4j.plugins.util.Builder<PluginWithGenericSubclassFoo1Builder> {
 
-        @PluginFactory
-        public static <B extends Builder<B>> B newBuilder() {
-            return new Builder<B>().asBuilder();
-        }
-
-        @PluginBuilderAttribute
+        @PluginAttribute
         @Required(message = "The foo1 given by the builder is null")
         private String foo1;
 
diff --git a/log4j-plugins/src/test/java/org/apache/logging/log4j/plugins/validation/ValidatingPluginWithGenericBuilder.java b/log4j-plugins/src/test/java/org/apache/logging/log4j/plugins/validation/ValidatingPluginWithGenericBuilder.java
index f197dd8..eb9db3f 100644
--- a/log4j-plugins/src/test/java/org/apache/logging/log4j/plugins/validation/ValidatingPluginWithGenericBuilder.java
+++ b/log4j-plugins/src/test/java/org/apache/logging/log4j/plugins/validation/ValidatingPluginWithGenericBuilder.java
@@ -17,7 +17,7 @@
 package org.apache.logging.log4j.plugins.validation;
 
 import org.apache.logging.log4j.plugins.Plugin;
-import org.apache.logging.log4j.plugins.PluginBuilderAttribute;
+import org.apache.logging.log4j.plugins.PluginAttribute;
 import org.apache.logging.log4j.plugins.PluginFactory;
 import org.apache.logging.log4j.plugins.validation.constraints.Required;
 
@@ -40,19 +40,13 @@ public class ValidatingPluginWithGenericBuilder {
     }
 
     @PluginFactory
-    public static ValidatingPluginWithGenericBuilder newValidatingPlugin(
-        @Required(message = "The name given by the factory is null") final String name) {
-        return new ValidatingPluginWithGenericBuilder(name);
-    }
-
-    @PluginFactory
     public static <B extends Builder<B>> B newBuilder() {
         return new Builder<B>().asBuilder();
     }
 
     public static class Builder<B extends Builder<B>> implements org.apache.logging.log4j.plugins.util.Builder<ValidatingPluginWithGenericBuilder> {
 
-        @PluginBuilderAttribute
+        @PluginAttribute
         @Required(message = "The name given by the builder is null")
         private String name;
 
diff --git a/log4j-smtp/src/main/java/org/apache/logging/log4j/smtp/appender/SmtpAppender.java b/log4j-smtp/src/main/java/org/apache/logging/log4j/smtp/appender/SmtpAppender.java
index 5c52ae8..c7754da 100644
--- a/log4j-smtp/src/main/java/org/apache/logging/log4j/smtp/appender/SmtpAppender.java
+++ b/log4j-smtp/src/main/java/org/apache/logging/log4j/smtp/appender/SmtpAppender.java
@@ -113,22 +113,22 @@ public final class SmtpAppender extends AbstractAppender {
     @PluginFactory
     public static SmtpAppender createAppender(
             @PluginConfiguration final Configuration config,
-            @PluginAttribute("name") @Required final String name,
-            @PluginAttribute("to") final String to,
-            @PluginAttribute("cc") final String cc,
-            @PluginAttribute("bcc") final String bcc,
-            @PluginAttribute("from") final String from,
-            @PluginAttribute("replyTo") final String replyTo,
-            @PluginAttribute("subject") final String subject,
-            @PluginAttribute("smtpProtocol") final String smtpProtocol,
-            @PluginAttribute("smtpHost") final String smtpHost,
+            @PluginAttribute @Required final String name,
+            @PluginAttribute final String to,
+            @PluginAttribute final String cc,
+            @PluginAttribute final String bcc,
+            @PluginAttribute final String from,
+            @PluginAttribute final String replyTo,
+            @PluginAttribute final String subject,
+            @PluginAttribute final String smtpProtocol,
+            @PluginAttribute final String smtpHost,
             @PluginAttribute(value = "smtpPort", defaultString = "0") @ValidPort final String smtpPortStr,
-            @PluginAttribute("smtpUsername") final String smtpUsername,
-            @PluginAttribute(value = "smtpPassword", sensitive = true) final String smtpPassword,
-            @PluginAttribute("smtpDebug") final String smtpDebug,
+            @PluginAttribute final String smtpUsername,
+            @PluginAttribute(sensitive = true) final String smtpPassword,
+            @PluginAttribute final String smtpDebug,
             @PluginAttribute("bufferSize") final String bufferSizeStr,
-            @PluginElement("Layout") Layout<? extends Serializable> layout,
-            @PluginElement("Filter") Filter filter,
+            @PluginElement Layout<? extends Serializable> layout,
+            @PluginElement Filter filter,
             @PluginAttribute("ignoreExceptions") final String ignore) {
         if (name == null) {
             LOGGER.error("No name provided for SmtpAppender");