LOG4J2-1326 modify SimpleMessage and ReusableSimpleMessage so they can carry CharSequence
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/ebb01542 Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/ebb01542 Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/ebb01542 Branch: refs/heads/LOG4J2-1356 Commit: ebb01542030df6961c2db5b4bfe3e2c685d541e8 Parents: 450c98d Author: rpopma <[email protected]> Authored: Thu Apr 7 22:05:04 2016 +0900 Committer: rpopma <[email protected]> Committed: Thu Apr 7 22:05:04 2016 +0900 ---------------------------------------------------------------------- .../log4j/message/ReusableSimpleMessage.java | 16 +++++--- .../logging/log4j/message/SimpleMessage.java | 43 +++++++++++++++++--- 2 files changed, 48 insertions(+), 11 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ebb01542/log4j-api/src/main/java/org/apache/logging/log4j/message/ReusableSimpleMessage.java ---------------------------------------------------------------------- diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/message/ReusableSimpleMessage.java b/log4j-api/src/main/java/org/apache/logging/log4j/message/ReusableSimpleMessage.java index 01e2e74..a0954dc 100644 --- a/log4j-api/src/main/java/org/apache/logging/log4j/message/ReusableSimpleMessage.java +++ b/log4j-api/src/main/java/org/apache/logging/log4j/message/ReusableSimpleMessage.java @@ -26,20 +26,24 @@ import org.apache.logging.log4j.util.PerformanceSensitive; public class ReusableSimpleMessage implements ReusableMessage { private static final long serialVersionUID = -9199974506498249809L; private static Object[] EMPTY_PARAMS = new Object[0]; - private String message; + private CharSequence charSequence; - public void set(String message) { - this.message = message; + public void set(final String message) { + this.charSequence = message; + } + + public void set(final CharSequence charSequence) { + this.charSequence = charSequence; } @Override public String getFormattedMessage() { - return message; + return String.valueOf(charSequence); } @Override public String getFormat() { - return message; + return getFormattedMessage(); } @Override @@ -54,7 +58,7 @@ public class ReusableSimpleMessage implements ReusableMessage { @Override public void formatTo(final StringBuilder buffer) { - buffer.append(message); + buffer.append(charSequence); } } http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ebb01542/log4j-api/src/main/java/org/apache/logging/log4j/message/SimpleMessage.java ---------------------------------------------------------------------- diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/message/SimpleMessage.java b/log4j-api/src/main/java/org/apache/logging/log4j/message/SimpleMessage.java index d5c8b88..106040e 100644 --- a/log4j-api/src/main/java/org/apache/logging/log4j/message/SimpleMessage.java +++ b/log4j-api/src/main/java/org/apache/logging/log4j/message/SimpleMessage.java @@ -16,6 +16,11 @@ */ package org.apache.logging.log4j.message; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.io.Serializable; + import org.apache.logging.log4j.util.StringBuilderFormattable; /** @@ -24,7 +29,8 @@ import org.apache.logging.log4j.util.StringBuilderFormattable; public class SimpleMessage implements Message, StringBuilderFormattable { private static final long serialVersionUID = -8398002534962715992L; - private final String message; + private String message; + private transient CharSequence charSequence; /** * Basic constructor. @@ -39,6 +45,16 @@ public class SimpleMessage implements Message, StringBuilderFormattable { */ public SimpleMessage(final String message) { this.message = message; + this.charSequence = message; + } + + /** + * Constructor that includes the message. + * @param charSequence The CharSequence message. + */ + public SimpleMessage(final CharSequence charSequence) { + // this.message = String.valueOf(charSequence); // postponed until getFormattedMessage + this.charSequence = charSequence; } /** @@ -47,12 +63,15 @@ public class SimpleMessage implements Message, StringBuilderFormattable { */ @Override public String getFormattedMessage() { + if (message == null) { + message = String.valueOf(charSequence); + } return message; } @Override public void formatTo(final StringBuilder buffer) { - buffer.append(message); + buffer.append(charSequence); } /** @@ -61,7 +80,7 @@ public class SimpleMessage implements Message, StringBuilderFormattable { */ @Override public String getFormat() { - return message; + return getFormattedMessage(); } /** @@ -84,12 +103,12 @@ public class SimpleMessage implements Message, StringBuilderFormattable { final SimpleMessage that = (SimpleMessage) o; - return !(message != null ? !message.equals(that.message) : that.message != null); + return !(charSequence != null ? !charSequence.equals(that.charSequence) : that.charSequence != null); } @Override public int hashCode() { - return message != null ? message.hashCode() : 0; + return charSequence != null ? charSequence.hashCode() : 0; } @Override @@ -106,4 +125,18 @@ public class SimpleMessage implements Message, StringBuilderFormattable { public Throwable getThrowable() { return null; } + + private void writeObject(final ObjectOutputStream out) throws IOException { + out.defaultWriteObject(); + if (charSequence instanceof Serializable) { + out.writeObject(charSequence); + } else { + out.writeObject(String.valueOf(charSequence)); + } + } + + private void readObject(final ObjectInputStream in) throws IOException, ClassNotFoundException { + in.defaultReadObject(); + charSequence = (CharSequence) in.readObject(); + } }
