Repository: logging-log4j2
Updated Branches:
  refs/heads/master a8b25055a -> ce6580811


[LOG4J2-1697] Add a SerializerBuilder to PatternLayout and deprecate
PatternLayout.createSerializer().

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

Branch: refs/heads/master
Commit: ce6580811ad8ab0f2bb1941ae478db62c902a8fe
Parents: a8b2505
Author: Gary Gregory <[email protected]>
Authored: Fri Nov 11 17:34:20 2016 -0800
Committer: Gary Gregory <[email protected]>
Committed: Fri Nov 11 17:34:20 2016 -0800

----------------------------------------------------------------------
 .../log4j/core/layout/AbstractCsvLayout.java    |   5 +-
 .../logging/log4j/core/layout/JsonLayout.java   |   4 +-
 .../log4j/core/layout/PatternLayout.java        | 110 ++++++++++++++++---
 .../logging/log4j/core/layout/YamlLayout.java   |   4 +-
 .../logging/log4j/core/net/SmtpManager.java     |   2 +-
 src/changes/changes.xml                         |   3 +
 6 files changed, 105 insertions(+), 23 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ce658081/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/AbstractCsvLayout.java
----------------------------------------------------------------------
diff --git 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/AbstractCsvLayout.java
 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/AbstractCsvLayout.java
index ffa6ea6..47b073c 100644
--- 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/AbstractCsvLayout.java
+++ 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/AbstractCsvLayout.java
@@ -67,8 +67,9 @@ public abstract class AbstractCsvLayout extends 
AbstractStringLayout {
 
     protected AbstractCsvLayout(final Configuration config, final Charset 
charset, final CSVFormat csvFormat,
             final String header, final String footer) {
-        super(config, charset, PatternLayout.createSerializer(config, null, 
header, null, null, false, false),
-                PatternLayout.createSerializer(config, null, footer, null, 
null, false, false));
+        super(config, charset, 
+                
PatternLayout.newSerializerBuilder().withConfiguration(config).withPattern(header).build(),
+                
PatternLayout.newSerializerBuilder().withConfiguration(config).withPattern(footer).build());
         this.format = csvFormat;
     }
 

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ce658081/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/JsonLayout.java
----------------------------------------------------------------------
diff --git 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/JsonLayout.java 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/JsonLayout.java
index 993572b..71e972e 100644
--- 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/JsonLayout.java
+++ 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/JsonLayout.java
@@ -814,8 +814,8 @@ public final class JsonLayout extends AbstractJacksonLayout 
{
         super(config, new JacksonFactory.JSON(encodeThreadContextAsList, 
includeStacktrace).newWriter(
                     locationInfo, properties, compact),
                 charset, compact, complete, eventEol,
-                PatternLayout.createSerializer(config, null, headerPattern, 
DEFAULT_HEADER, null, false, false),
-                PatternLayout.createSerializer(config, null, footerPattern, 
DEFAULT_FOOTER, null, false, false));
+                
PatternLayout.newSerializerBuilder().withConfiguration(config).withPattern(headerPattern).withDefaultPattern(DEFAULT_HEADER).build(),
+                
PatternLayout.newSerializerBuilder().withConfiguration(config).withPattern(footerPattern).withDefaultPattern(DEFAULT_FOOTER).build());
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ce658081/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/PatternLayout.java
----------------------------------------------------------------------
diff --git 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/PatternLayout.java
 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/PatternLayout.java
index 5eb9f3c..f5c8a6e 100644
--- 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/PatternLayout.java
+++ 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/PatternLayout.java
@@ -112,24 +112,36 @@ public final class PatternLayout extends 
AbstractStringLayout {
                 patternSelector, alwaysWriteExceptions, noConsoleNoAnsi);
     }
 
+    public static SerializerBuilder newSerializerBuilder() {
+        return new SerializerBuilder();
+    }
+
+    /**
+     * Deprecated, use {@link #newSerializerBuilder()} instead.
+     * 
+     * @param configuration
+     * @param replace
+     * @param pattern
+     * @param defaultPattern
+     * @param patternSelector
+     * @param alwaysWriteExceptions
+     * @param noConsoleNoAnsi
+     * @return a new Serializer.
+     * @deprecated Use {@link #newSerializerBuilder()} instead.
+     */
+    @Deprecated
     public static Serializer createSerializer(final Configuration 
configuration, final RegexReplacement replace,
             final String pattern, final String defaultPattern, final 
PatternSelector patternSelector,
             final boolean alwaysWriteExceptions, final boolean 
noConsoleNoAnsi) {
-        if (Strings.isEmpty(pattern) && Strings.isEmpty(defaultPattern)) {
-            return null;
-        }
-        if (patternSelector == null) {
-            try {
-                final PatternParser parser = 
createPatternParser(configuration);
-                final List<PatternFormatter> list = parser.parse(pattern == 
null ? defaultPattern : pattern,
-                        alwaysWriteExceptions, noConsoleNoAnsi);
-                final PatternFormatter[] formatters = list.toArray(new 
PatternFormatter[0]);
-                return new PatternSerializer(formatters, replace);
-            } catch (final RuntimeException ex) {
-                throw new IllegalArgumentException("Cannot parse pattern '" + 
pattern + "'", ex);
-            }
-        }
-        return new PatternSelectorSerializer(patternSelector, replace);
+        SerializerBuilder builder = newSerializerBuilder();
+        builder.withAlwaysWriteExceptions(alwaysWriteExceptions);
+        builder.withConfiguration(configuration);
+        builder.withDefaultPattern(defaultPattern);
+        builder.withNoConsoleNoAnsi(noConsoleNoAnsi);
+        builder.withPattern(pattern);
+        builder.withPatternSelector(patternSelector);
+        builder.withReplace(replace);
+        return builder.build();
     }
 
     /**
@@ -315,8 +327,74 @@ public final class PatternLayout extends 
AbstractStringLayout {
         }
     }
 
-    private static class PatternSelectorSerializer implements Serializer, 
Serializer2 {
+    public static class SerializerBuilder implements 
org.apache.logging.log4j.core.util.Builder<Serializer> {
+
+        private Configuration configuration;
+        private RegexReplacement replace;
+        private String pattern;
+        private String defaultPattern;
+        private PatternSelector patternSelector;
+        private boolean alwaysWriteExceptions;
+        private boolean noConsoleNoAnsi;
+        
+        @Override
+        public Serializer build() {
+            if (Strings.isEmpty(pattern) && Strings.isEmpty(defaultPattern)) {
+                return null;
+            }
+            if (patternSelector == null) {
+                try {
+                    final PatternParser parser = 
createPatternParser(configuration);
+                    final List<PatternFormatter> list = parser.parse(pattern 
== null ? defaultPattern : pattern,
+                            alwaysWriteExceptions, noConsoleNoAnsi);
+                    final PatternFormatter[] formatters = list.toArray(new 
PatternFormatter[0]);
+                    return new PatternSerializer(formatters, replace);
+                } catch (final RuntimeException ex) {
+                    throw new IllegalArgumentException("Cannot parse pattern 
'" + pattern + "'", ex);
+                }
+            }
+            return new PatternSelectorSerializer(patternSelector, replace);
+        }
+
+        public SerializerBuilder withConfiguration(final Configuration 
configuration) {
+            this.configuration = configuration;
+            return this;
+        }
 
+        public SerializerBuilder withReplace(final RegexReplacement replace) {
+            this.replace = replace;
+            return this;
+        }
+
+        public SerializerBuilder withPattern(final String pattern) {
+            this.pattern = pattern;
+            return this;
+        }
+
+        public SerializerBuilder withDefaultPattern(final String 
defaultPattern) {
+            this.defaultPattern = defaultPattern;
+            return this;
+        }
+
+        public SerializerBuilder withPatternSelector(final PatternSelector 
patternSelector) {
+            this.patternSelector = patternSelector;
+            return this;
+        }
+
+        public SerializerBuilder withAlwaysWriteExceptions(final boolean 
alwaysWriteExceptions) {
+            this.alwaysWriteExceptions = alwaysWriteExceptions;
+            return this;
+        }
+
+        public SerializerBuilder withNoConsoleNoAnsi(boolean noConsoleNoAnsi) {
+            this.noConsoleNoAnsi = noConsoleNoAnsi;
+            return this;
+        }
+        
+    }
+
+    private static class PatternSelectorSerializer implements Serializer, 
Serializer2 {
+        
         private final PatternSelector patternSelector;
         private final RegexReplacement replace;
 

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ce658081/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/YamlLayout.java
----------------------------------------------------------------------
diff --git 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/YamlLayout.java 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/YamlLayout.java
index 61d6ad8..91cfd9e 100644
--- 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/YamlLayout.java
+++ 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/YamlLayout.java
@@ -713,8 +713,8 @@ public final class YamlLayout extends AbstractJacksonLayout 
{
             final String footerPattern, final Charset charset, final boolean 
includeStacktrace) {
         super(config, new 
JacksonFactory.YAML(includeStacktrace).newWriter(locationInfo, properties, 
compact), charset, compact,
                 complete, eventEol,
-                PatternLayout.createSerializer(config, null, headerPattern, 
DEFAULT_HEADER, null, false, false),
-                PatternLayout.createSerializer(config, null, footerPattern, 
DEFAULT_FOOTER, null, false, false));
+                
PatternLayout.newSerializerBuilder().withConfiguration(config).withPattern(headerPattern).withDefaultPattern(DEFAULT_HEADER).build(),
+                
PatternLayout.newSerializerBuilder().withConfiguration(config).withPattern(footerPattern).withDefaultPattern(DEFAULT_FOOTER).build());
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ce658081/log4j-core/src/main/java/org/apache/logging/log4j/core/net/SmtpManager.java
----------------------------------------------------------------------
diff --git 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/SmtpManager.java 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/SmtpManager.java
index 5494911..ecefa19 100644
--- 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/SmtpManager.java
+++ 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/SmtpManager.java
@@ -141,7 +141,7 @@ public class SmtpManager extends AbstractManager {
         sb.append(filterName);
 
         final String name = "SMTP:" + NameUtil.md5(sb.toString());
-        final Serializer subjectSerializer = 
PatternLayout.createSerializer(config, null, subject, null, null, false, false);
+        final Serializer subjectSerializer = 
PatternLayout.newSerializerBuilder().withConfiguration(config).withPattern(subject).build();
 
         return getManager(name, FACTORY, new FactoryData(to, cc, bcc, from, 
replyTo, subjectSerializer,
             protocol, host, port, username, password, isDebug, numElements));

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ce658081/src/changes/changes.xml
----------------------------------------------------------------------
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index bfe8ad3..e962a49 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -120,6 +120,9 @@
       <action issue="LOG4J2-1696" dev="ggregory" type="add">
         Add a Builder to MarkerPatternSelector and deprecate 
MarkerPatternSelector.createSelector().
       </action>
+      <action issue="LOG4J2-1697" dev="ggregory" type="add">
+        Add a SerializerBuilder to PatternLayout and deprecate 
PatternLayout.createSerializer().
+      </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">

Reply via email to