I hadn't thought of that. In this case though not all attributes are immutable so going through Log4jLogEvent.Proxy may be prudent. (In spite of the name, Java io serialization is not involved here. )
Sent from my iPhone > On 2016/04/18, at 19:54, Mikael Ståldal <[email protected]> wrote: > > Isn't this what clone() should be used for? > >> On Sat, Apr 16, 2016 at 10:51 PM, Remko Popma <[email protected]> wrote: >> Makes sense. >> >> Sent from my iPhone >> >>> On 2016/04/16, at 23:20, Gary Gregory <[email protected]> wrote: >>> >>> Hi, >>> >>> The ser+deser sequence feels like something that should be refactored into >>> a serializedCopy() or deepCopy() method depending on whether or not you >>> want to publicize the copying technique. >>> >>> Gary >>> >>> ---------- Forwarded message ---------- >>> From: <[email protected]> >>> Date: Apr 16, 2016 5:55 AM >>> Subject: [3/5] logging-log4j2 git commit: LOG4J2-1334 ListAppender must add >>> snapshot of MutableLogEvent to the list, not the MutableLogEvent itself >>> (since it will change) >>> To: <[email protected]> >>> Cc: >>> >>>> LOG4J2-1334 ListAppender must add snapshot of MutableLogEvent to the list, >>>> not the MutableLogEvent itself (since it will change) >>>> >>>> >>>> Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo >>>> Commit: >>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/3f395f63 >>>> Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/3f395f63 >>>> Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/3f395f63 >>>> >>>> Branch: refs/heads/master >>>> Commit: 3f395f63d03b603ef628e214d3f01dd226793baf >>>> Parents: 07cd44a >>>> Author: rpopma <[email protected]> >>>> Authored: Sat Apr 16 21:41:40 2016 +0900 >>>> Committer: rpopma <[email protected]> >>>> Committed: Sat Apr 16 21:41:40 2016 +0900 >>>> >>>> ---------------------------------------------------------------------- >>>> .../apache/logging/log4j/test/appender/ListAppender.java | 9 ++++++++- >>>> 1 file changed, 8 insertions(+), 1 deletion(-) >>>> ---------------------------------------------------------------------- >>>> >>>> >>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/3f395f63/log4j-core/src/test/java/org/apache/logging/log4j/test/appender/ListAppender.java >>>> ---------------------------------------------------------------------- >>>> diff --git >>>> a/log4j-core/src/test/java/org/apache/logging/log4j/test/appender/ListAppender.java >>>> >>>> b/log4j-core/src/test/java/org/apache/logging/log4j/test/appender/ListAppender.java >>>> index 97ca15d..19aeaee 100644 >>>> --- >>>> a/log4j-core/src/test/java/org/apache/logging/log4j/test/appender/ListAppender.java >>>> +++ >>>> b/log4j-core/src/test/java/org/apache/logging/log4j/test/appender/ListAppender.java >>>> @@ -31,6 +31,8 @@ import >>>> org.apache.logging.log4j.core.config.plugins.PluginAttribute; >>>> import org.apache.logging.log4j.core.config.plugins.PluginElement; >>>> import org.apache.logging.log4j.core.config.plugins.PluginFactory; >>>> import >>>> org.apache.logging.log4j.core.config.plugins.validation.constraints.Required; >>>> +import org.apache.logging.log4j.core.impl.Log4jLogEvent; >>>> +import org.apache.logging.log4j.core.impl.MutableLogEvent; >>>> import org.apache.logging.log4j.core.layout.SerializedLayout; >>>> >>>> /** >>>> @@ -81,7 +83,12 @@ public class ListAppender extends AbstractAppender { >>>> public synchronized void append(final LogEvent event) { >>>> final Layout<? extends Serializable> layout = getLayout(); >>>> if (layout == null) { >>>> - events.add(event); >>>> + if (event instanceof MutableLogEvent) { >>>> + // must take snapshot or subsequent calls to logger.log() >>>> will modify this event >>>> + >>>> events.add(Log4jLogEvent.deserialize(Log4jLogEvent.serialize(event, >>>> event.isIncludeLocation()))); >>>> + } else { >>>> + events.add(event); >>>> + } >>>> } else if (layout instanceof SerializedLayout) { >>>> final byte[] header = layout.getHeader(); >>>> final byte[] content = layout.toByteArray(event); > > > > -- > > > Mikael Ståldal > Senior software developer > > Magine TV > [email protected] > Grev Turegatan 3 | 114 46 Stockholm, Sweden | www.magine.com > > Privileged and/or Confidential Information may be contained in this message. > If you are not the addressee indicated in this message > (or responsible for delivery of the message to such a person), you may not > copy or deliver this message to anyone. In such case, > you should destroy this message and kindly notify the sender by reply email. >
