You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by gg...@apache.org on 2016/11/12 00:36:35 UTC

logging-log4j2 git commit: [LOG4J2-1696] Add a Builder to MarkerPatternSelector and deprecate MarkerPatternSelector.createSelector().

Repository: logging-log4j2
Updated Branches:
  refs/heads/master 857bb374e -> 4577ee40a


[LOG4J2-1696] Add a Builder to MarkerPatternSelector and deprecate
MarkerPatternSelector.createSelector().

Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/4577ee40
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/4577ee40
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/4577ee40

Branch: refs/heads/master
Commit: 4577ee40a3af2d1cf96c4dbe5866755fb23b2150
Parents: 857bb37
Author: Gary Gregory <gg...@apache.org>
Authored: Fri Nov 11 16:36:27 2016 -0800
Committer: Gary Gregory <gg...@apache.org>
Committed: Fri Nov 11 16:36:27 2016 -0800

----------------------------------------------------------------------
 .../core/layout/MarkerPatternSelector.java      | 120 +++++++++++++++----
 src/changes/changes.xml                         |   3 +
 2 files changed, 103 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4577ee40/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/MarkerPatternSelector.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/MarkerPatternSelector.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/MarkerPatternSelector.java
index 17242cb..467989c 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/MarkerPatternSelector.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/MarkerPatternSelector.java
@@ -16,6 +16,10 @@
  */
 package org.apache.logging.log4j.core.layout;
 
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.Marker;
 import org.apache.logging.log4j.core.LogEvent;
@@ -23,23 +27,81 @@ import org.apache.logging.log4j.core.config.Configuration;
 import org.apache.logging.log4j.core.config.Node;
 import org.apache.logging.log4j.core.config.plugins.Plugin;
 import org.apache.logging.log4j.core.config.plugins.PluginAttribute;
+import org.apache.logging.log4j.core.config.plugins.PluginBuilderAttribute;
+import org.apache.logging.log4j.core.config.plugins.PluginBuilderFactory;
 import org.apache.logging.log4j.core.config.plugins.PluginConfiguration;
 import org.apache.logging.log4j.core.config.plugins.PluginElement;
-import org.apache.logging.log4j.core.config.plugins.PluginFactory;
+import org.apache.logging.log4j.core.layout.ScriptPatternSelector.Builder;
 import org.apache.logging.log4j.core.pattern.PatternFormatter;
 import org.apache.logging.log4j.core.pattern.PatternParser;
 import org.apache.logging.log4j.status.StatusLogger;
 
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
 /**
  * Selects the pattern to use based on the Marker in the LogEvent.
  */
 @Plugin(name = "MarkerPatternSelector", category = Node.CATEGORY, elementType = PatternSelector.ELEMENT_TYPE, printObject = true)
 public class MarkerPatternSelector implements PatternSelector {
 
+    /**
+     * Custom MarkerPatternSelector builder. Use the {@link MarkerPatternSelector#newBuilder() builder factory method} to create this.
+     */
+    public static class Builder implements org.apache.logging.log4j.core.util.Builder<MarkerPatternSelector> {
+
+        @PluginElement("PatternMatch")
+        private PatternMatch[] properties;
+        
+        @PluginBuilderAttribute("defaultPattern")
+        private String defaultPattern;
+        
+        @PluginBuilderAttribute(value = "alwaysWriteExceptions") 
+        private boolean alwaysWriteExceptions = true;
+        
+        @PluginBuilderAttribute(value = "noConsoleNoAnsi") 
+        private boolean noConsoleNoAnsi;
+        
+        @PluginConfiguration 
+        private Configuration configuration;
+
+        @Override
+        public MarkerPatternSelector build() {
+            if (defaultPattern == null) {
+                defaultPattern = PatternLayout.DEFAULT_CONVERSION_PATTERN;
+            }
+            if (properties == null || properties.length == 0) {
+                LOGGER.warn("No marker patterns were provided with PatternMatch");
+                return null;
+            }
+            return new MarkerPatternSelector(properties, defaultPattern, alwaysWriteExceptions, noConsoleNoAnsi,
+                    configuration);
+        }
+
+        public Builder withProperties(PatternMatch[] properties) {
+            this.properties = properties;
+            return this;
+        }
+
+        public Builder withDefaultPattern(String defaultPattern) {
+            this.defaultPattern = defaultPattern;
+            return this;
+        }
+
+        public Builder withAlwaysWriteExceptions(boolean alwaysWriteExceptions) {
+            this.alwaysWriteExceptions = alwaysWriteExceptions;
+            return this;
+        }
+
+        public Builder withNoConsoleNoAnsi(boolean noConsoleNoAnsi) {
+            this.noConsoleNoAnsi = noConsoleNoAnsi;
+            return this;
+        }
+
+        public Builder withConfiguration(Configuration configuration) {
+            this.configuration = configuration;
+            return this;
+        }
+
+    }
+    
     private final Map<String, PatternFormatter[]> formatterMap = new HashMap<>();
 
     private final Map<String, String> patternMap = new HashMap<>();
@@ -87,22 +149,40 @@ public class MarkerPatternSelector implements PatternSelector {
         return defaultFormatters;
     }
 
+    /**
+     * Creates a builder for a custom ScriptPatternSelector.
+     *
+     * @return a ScriptPatternSelector builder.
+     */
+    @PluginBuilderFactory
+    public static Builder newBuilder() {
+        return new Builder();
+    }
 
-    @PluginFactory
-    public static MarkerPatternSelector createSelector(@PluginElement("PatternMatch") final PatternMatch[] properties,
-                                                       @PluginAttribute("defaultPattern") String defaultPattern,
-                                                       @PluginAttribute(value = "alwaysWriteExceptions", defaultBoolean = true) final boolean alwaysWriteExceptions,
-                                                       @PluginAttribute(value = "noConsoleNoAnsi", defaultBoolean = false) final boolean noConsoleNoAnsi,
-                                                       @PluginConfiguration final Configuration config) {
-        if (defaultPattern == null) {
-            defaultPattern = PatternLayout.DEFAULT_CONVERSION_PATTERN;
-        }
-        if (properties == null || properties.length == 0) {
-            LOGGER.warn("No marker patterns were provided with PatternMatch");
-            return null;
-        }
-        return new MarkerPatternSelector(properties, defaultPattern, alwaysWriteExceptions,
-                noConsoleNoAnsi, config);
+    /**
+     * Deprecated, use {@link #newBuilder()} instead.
+     * @param properties
+     * @param defaultPattern
+     * @param alwaysWriteExceptions
+     * @param noConsoleNoAnsi
+     * @param configuration
+     * @return a new MarkerPatternSelector.
+     * @deprecated Use {@link #newBuilder()} instead.
+     */
+    @Deprecated
+    public static MarkerPatternSelector createSelector(
+            final PatternMatch[] properties,
+            final String defaultPattern,
+            final boolean alwaysWriteExceptions,
+            final boolean noConsoleNoAnsi,
+            final Configuration configuration) {
+        final Builder builder = newBuilder();
+        builder.withProperties(properties);
+        builder.withDefaultPattern(defaultPattern);
+        builder.withAlwaysWriteExceptions(alwaysWriteExceptions);
+        builder.withNoConsoleNoAnsi(noConsoleNoAnsi);
+        builder.withConfiguration(configuration);
+        return builder.build();
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4577ee40/src/changes/changes.xml
----------------------------------------------------------------------
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index bc67f37..bfe8ad3 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -117,6 +117,9 @@
       <action issue="LOG4J2-1695" dev="ggregory" type="add">
         Add a Builder to ScriptPatternSelector and deprecate ScriptPatternSelector.createSelector().
       </action>
+      <action issue="LOG4J2-1696" dev="ggregory" type="add">
+        Add a Builder to MarkerPatternSelector and deprecate MarkerPatternSelector.createSelector().
+      </action>
     </release>
     <release version="2.7" date="2016-10-02" description="GA Release 2.7">
       <action issue="LOG4J2-1618" dev="rpopma" type="fix" due-to="Raman Gupta">