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">