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