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 <[email protected]> Authored: Fri Nov 11 16:36:27 2016 -0800 Committer: Gary Gregory <[email protected]> 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">
