Gary, can you add a note of this public API change in changes.xml?
On Thu, Jun 26, 2014 at 12:27 AM, <ggreg...@apache.org> wrote: > Author: ggregory > Date: Wed Jun 25 15:27:32 2014 > New Revision: 1605450 > > URL: http://svn.apache.org/r1605450 > Log: > Make org.apache.logging.log4j.core.layout.AbstractLayout immutable. > > Modified: > > logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/AbstractLayout.java > > logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/AbstractStringLayout.java > > logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/PatternLayout.java > > logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/SerializedLayout.java > > Modified: > logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/AbstractLayout.java > URL: > http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/AbstractLayout.java?rev=1605450&r1=1605449&r2=1605450&view=diff > > ============================================================================== > --- > logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/AbstractLayout.java > (original) > +++ > logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/AbstractLayout.java > Wed Jun 25 15:27:32 2014 > @@ -24,24 +24,44 @@ import org.apache.logging.log4j.status.S > > /** > * Abstract base class for Layouts. > - * @param <T> The Class that the Layout will format the LogEvent into. > + * > + * @param <T> > + * The Class that the Layout will format the LogEvent into. > */ > public abstract class AbstractLayout<T extends Serializable> implements > Layout<T> { > + > + /** > + * Constructs a layout with an optional header and footer. > + * > + * @param header > + * The header to include when the stream is opened. May be > null. > + * @param footer > + * The footer to add when the stream is closed. May be null. > + */ > + public AbstractLayout(byte[] header, byte[] footer) { > + super(); > + this.header = header; > + this.footer = footer; > + } > + > /** > * Allow subclasses access to the status logger without creating > another instance. > */ > protected static final Logger LOGGER = StatusLogger.getLogger(); > + > /** > * The header to include when the stream is opened. May be null. > */ > - protected byte[] header; > + protected final byte[] header; > + > /** > * The footer to add when the stream is closed. May be null. > */ > - protected byte[] footer; > + protected final byte[] footer; > > /** > * Returns the header, if one is available. > + * > * @return A byte array containing the header. > */ > @Override > @@ -50,27 +70,12 @@ public abstract class AbstractLayout<T e > } > > /** > - * Set the header. > - * @param header The header. > - */ > - public void setHeader(final byte[] header) { > - this.header = header; > - } > - > - /** > * Returns the footer, if one is available. > + * > * @return A byte array containing the footer. > */ > @Override > public byte[] getFooter() { > return footer; > } > - > - /** > - * Set the footer. > - * @param footer The footer. > - */ > - public void setFooter(final byte[] footer) { > - this.footer = footer; > - } > } > > Modified: > logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/AbstractStringLayout.java > URL: > http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/AbstractStringLayout.java?rev=1605450&r1=1605449&r2=1605450&view=diff > > ============================================================================== > --- > logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/AbstractStringLayout.java > (original) > +++ > logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/AbstractStringLayout.java > Wed Jun 25 15:27:32 2014 > @@ -31,14 +31,20 @@ public abstract class AbstractStringLayo > */ > private final Charset charset; > > - protected AbstractStringLayout(final Charset charset) { > + protected AbstractStringLayout(final Charset charset, byte[] header, > byte[] footer) { > + super(header, footer); > this.charset = charset == null ? Charsets.UTF_8 : charset; > } > > + protected AbstractStringLayout(final Charset charset) { > + this(charset, null, null); > + } > + > /** > * Formats the Log Event as a byte array. > * > - * @param event The Log Event. > + * @param event > + * The Log Event. > * @return The formatted event as a byte array. > */ > @Override > > Modified: > logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/PatternLayout.java > URL: > http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/PatternLayout.java?rev=1605450&r1=1605449&r2=1605450&view=diff > > ============================================================================== > --- > logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/PatternLayout.java > (original) > +++ > logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/PatternLayout.java > Wed Jun 25 15:27:32 2014 > @@ -114,7 +114,7 @@ public final class PatternLayout extends > private PatternLayout(final Configuration config, final > RegexReplacement replace, final String pattern, > final Charset charset, final boolean > alwaysWriteExceptions, final boolean noConsoleNoAnsi, > final String header, final String footer) { > - super(charset); > + super(charset, toBytes(header, charset), toBytes(footer, > charset)); > this.replace = replace; > this.conversionPattern = pattern; > this.config = config; > @@ -122,21 +122,13 @@ public final class PatternLayout extends > this.noConsoleNoAnsi = noConsoleNoAnsi; > final PatternParser parser = createPatternParser(config); > this.formatters = parser.parse(pattern == null ? > DEFAULT_CONVERSION_PATTERN : pattern, this.alwaysWriteExceptions, > this.noConsoleNoAnsi); > - if (charset != null) { > - if (header != null) { > - setHeader(header.getBytes(charset)); > - } > - if (footer != null) { > - setFooter(footer.getBytes(charset)); > - } > - } else { > - if (header != null) { > - setHeader(header.getBytes()); > - } > - if (footer != null) { > - setFooter(footer.getBytes()); > - } > + } > + > + private static byte[] toBytes(String str, Charset charset) { > + if (str != null) { > + return str.getBytes(charset != null ? charset : > Charset.defaultCharset()); > } > + return null; > } > > private byte[] strSubstitutorReplace(final byte... b) { > > Modified: > logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/SerializedLayout.java > URL: > http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/SerializedLayout.java?rev=1605450&r1=1605449&r2=1605450&view=diff > > ============================================================================== > --- > logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/SerializedLayout.java > (original) > +++ > logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/SerializedLayout.java > Wed Jun 25 15:27:32 2014 > @@ -47,6 +47,7 @@ public final class SerializedLayout exte > } > > private SerializedLayout() { > + super(null, null); > } > > /** > > >