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:15:33 UTC

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

Repository: logging-log4j2
Updated Branches:
  refs/heads/master 355d260ea -> a39420ae8


[LOG4J2-1695] Add a Builder to ScriptPatternSelector and deprecate
ScriptPatternSelector.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/a39420ae
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/a39420ae
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/a39420ae

Branch: refs/heads/master
Commit: a39420ae896024b95ab2a22ff8539a06a54fb964
Parents: 355d260
Author: Gary Gregory <gg...@apache.org>
Authored: Fri Nov 11 16:15:29 2016 -0800
Committer: Gary Gregory <gg...@apache.org>
Committed: Fri Nov 11 16:15:29 2016 -0800

----------------------------------------------------------------------
 .../core/layout/ScriptPatternSelector.java      | 146 +++++++++++++++----
 src/changes/changes.xml                         |   3 +
 2 files changed, 124 insertions(+), 25 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/a39420ae/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/ScriptPatternSelector.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/ScriptPatternSelector.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/ScriptPatternSelector.java
index 7f926b7..29d02f3 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/ScriptPatternSelector.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/ScriptPatternSelector.java
@@ -22,9 +22,12 @@ 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.PatternLayout.Builder;
 import org.apache.logging.log4j.core.pattern.PatternFormatter;
 import org.apache.logging.log4j.core.pattern.PatternParser;
 import org.apache.logging.log4j.core.script.AbstractScript;
@@ -42,6 +45,86 @@ import java.util.Map;
 @Plugin(name = "ScriptPatternSelector", category = Node.CATEGORY, elementType = PatternSelector.ELEMENT_TYPE, printObject = true)
 public class ScriptPatternSelector implements PatternSelector {
 
+    /**
+     * Custom PatternLayout builder. Use the {@link PatternLayout#newBuilder() builder factory method} to create this.
+     */
+    public static class Builder implements org.apache.logging.log4j.core.util.Builder<ScriptPatternSelector> {
+
+        @PluginElement("Script") 
+        private AbstractScript script;
+        
+        @PluginElement("PatternMatch") 
+        private PatternMatch[] properties;
+        
+        @PluginBuilderAttribute("defaultPattern") 
+        private String defaultPattern;
+        
+        @PluginBuilderAttribute("alwaysWriteExceptions") 
+        private boolean alwaysWriteExceptions = true;
+        
+        @PluginBuilderAttribute("noConsoleNoAnsi") 
+        private boolean noConsoleNoAnsi;
+        
+        @PluginConfiguration 
+        private Configuration config;
+
+        private Builder() {
+            // nothing
+        }
+
+        @Override
+        public ScriptPatternSelector build() {
+            if (script == null) {
+                LOGGER.error("A Script, ScriptFile or ScriptRef element must be provided for this ScriptFilter");
+                return null;
+            }
+            if (script instanceof ScriptRef) {
+                if (config.getScriptManager().getScript(script.getName()) == null) {
+                    LOGGER.error("No script with name {} has been declared.", script.getName());
+                    return null;
+                }
+            }
+            if (defaultPattern == null) {
+                defaultPattern = PatternLayout.DEFAULT_CONVERSION_PATTERN;
+            }
+            if (properties == null || properties.length == 0) {
+                LOGGER.warn("No marker patterns were provided");
+                return null;
+            }
+            return new ScriptPatternSelector(script, properties, defaultPattern, alwaysWriteExceptions, noConsoleNoAnsi, config);
+        }
+
+        public Builder withScript(AbstractScript script) {
+            this.script = script;
+            return this;
+        }
+
+        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 config) {
+            this.config = config;
+            return this;
+        }
+    }
+    
     private final Map<String, PatternFormatter[]> formatterMap = new HashMap<>();
 
     private final Map<String, String> patternMap = new HashMap<>();
@@ -98,31 +181,44 @@ public class ScriptPatternSelector implements PatternSelector {
     }
 
 
-    @PluginFactory
-    public static ScriptPatternSelector createSelector(@PluginElement("Script") final AbstractScript script,
-                                                       @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 (script == null) {
-            LOGGER.error("A Script, ScriptFile or ScriptRef element must be provided for this ScriptFilter");
-            return null;
-        }
-        if (script instanceof ScriptRef) {
-            if (config.getScriptManager().getScript(script.getName()) == null) {
-                LOGGER.error("No script with name {} has been declared.", script.getName());
-                return null;
-            }
-        }
-        if (defaultPattern == null) {
-            defaultPattern = PatternLayout.DEFAULT_CONVERSION_PATTERN;
-        }
-        if (properties == null || properties.length == 0) {
-            LOGGER.warn("No marker patterns were provided");
-            return null;
-        }
-        return new ScriptPatternSelector(script, properties, defaultPattern, alwaysWriteExceptions, noConsoleNoAnsi, config);
+    /**
+     * Creates a builder for a custom ScriptPatternSelector.
+     *
+     * @return a ScriptPatternSelector builder.
+     */
+    @PluginBuilderFactory
+    public static Builder newBuilder() {
+        return new Builder();
+    }
+
+    /**
+     * Deprecated, use {@link #newBuilder()} instead.
+     * 
+     * @param script
+     * @param properties
+     * @param defaultPattern
+     * @param alwaysWriteExceptions
+     * @param noConsoleNoAnsi
+     * @param configuration
+     * @return a new ScriptPatternSelector
+     * @deprecated Use {@link #newBuilder()} instead.
+     */
+    @Deprecated
+    public static ScriptPatternSelector createSelector(
+            @PluginElement("Script") final AbstractScript script,
+            @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 configuration) {
+        final Builder builder = newBuilder();
+        builder.withScript(script);
+        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/a39420ae/src/changes/changes.xml
----------------------------------------------------------------------
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index a930722..bc67f37 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -114,6 +114,9 @@
       <action issue="LOG4J2-1681" dev="rpopma" type="add">
         Changed visibility of indexed getter methods in SortedArrayStringMap from package-protected to public.
       </action>
+      <action issue="LOG4J2-1695" dev="ggregory" type="add">
+        Add a Builder to ScriptPatternSelector and deprecate ScriptPatternSelector.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">