You need to review http://logging.apache.org/log4j/2.x/javastyle.html 
<http://logging.apache.org/log4j/2.x/javastyle.html>. In particular you 
reordered the imports when they were correct to start with and you changed 
specific imports to a wildcard import.

Ralph


> On Apr 27, 2016, at 10:04 AM, [email protected] wrote:
> 
> Repository: logging-log4j2
> Updated Branches:
>  refs/heads/LOG4J2-1347 [created] 1b134cf3c
> 
> 
> LogEvent memento
> 
> 
> Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
> Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/1b134cf3
> Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/1b134cf3
> Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/1b134cf3
> 
> Branch: refs/heads/LOG4J2-1347
> Commit: 1b134cf3cbd227562fdfa8c4744366e09a03d4c2
> Parents: 7c36904
> Author: Mikael Ståldal <[email protected]>
> Authored: Wed Apr 27 19:04:01 2016 +0200
> Committer: Mikael Ståldal <[email protected]>
> Committed: Wed Apr 27 19:04:01 2016 +0200
> 
> ----------------------------------------------------------------------
> .../log4j/core/appender/AsyncAppender.java      | 62 +++++++++-----------
> .../logging/log4j/core/impl/Log4jLogEvent.java  | 10 ++++
> .../log4j/core/impl/MutableLogEvent.java        | 11 ++++
> .../core/layout/AbstractJacksonLayout.java      |  2 +-
> .../logging/log4j/core/net/SmtpManager.java     |  2 +-
> .../log4j/test/appender/ListAppender.java       |  2 +-
> 6 files changed, 52 insertions(+), 37 deletions(-)
> ----------------------------------------------------------------------
> 
> 
> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/1b134cf3/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AsyncAppender.java
> ----------------------------------------------------------------------
> diff --git 
> a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AsyncAppender.java
>  
> b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AsyncAppender.java
> index aa10155..72f9ca8 100644
> --- 
> a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AsyncAppender.java
> +++ 
> b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AsyncAppender.java
> @@ -16,14 +16,7 @@
>  */
> package org.apache.logging.log4j.core.appender;
> 
> -import java.io.Serializable;
> -import java.util.ArrayList;
> -import java.util.List;
> -import java.util.Map;
> -import java.util.concurrent.ArrayBlockingQueue;
> -import java.util.concurrent.BlockingQueue;
> -import java.util.concurrent.atomic.AtomicLong;
> -
> +import org.apache.logging.log4j.core.AbstractLogEvent;
> import org.apache.logging.log4j.core.Appender;
> import org.apache.logging.log4j.core.Filter;
> import org.apache.logging.log4j.core.LogEvent;
> @@ -35,15 +28,17 @@ import 
> org.apache.logging.log4j.core.config.AppenderControl;
> import org.apache.logging.log4j.core.config.AppenderRef;
> import org.apache.logging.log4j.core.config.Configuration;
> import org.apache.logging.log4j.core.config.ConfigurationException;
> -import org.apache.logging.log4j.core.config.plugins.Plugin;
> -import org.apache.logging.log4j.core.config.plugins.PluginAliases;
> -import org.apache.logging.log4j.core.config.plugins.PluginAttribute;
> -import org.apache.logging.log4j.core.config.plugins.PluginConfiguration;
> -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.*;
> import org.apache.logging.log4j.core.impl.Log4jLogEvent;
> import org.apache.logging.log4j.core.util.Constants;
> 
> +import java.util.ArrayList;
> +import java.util.List;
> +import java.util.Map;
> +import java.util.concurrent.ArrayBlockingQueue;
> +import java.util.concurrent.BlockingQueue;
> +import java.util.concurrent.atomic.AtomicLong;
> +
> /**
>  * Appends to one or more Appenders asynchronously. You can configure an 
> AsyncAppender with one or more Appenders and an
>  * Appender to append to if the queue is full. The AsyncAppender does not 
> allow a filter to be specified on the Appender
> @@ -53,11 +48,11 @@ import org.apache.logging.log4j.core.util.Constants;
> public final class AsyncAppender extends AbstractAppender {
> 
>     private static final int DEFAULT_QUEUE_SIZE = 128;
> -    private static final String SHUTDOWN = "Shutdown";
> +    private static final LogEvent SHUTDOWN = new AbstractLogEvent() { };
> 
>     private static final AtomicLong THREAD_SEQUENCE = new AtomicLong(1);
> 
> -    private final BlockingQueue<Serializable> queue;
> +    private final BlockingQueue<LogEvent> queue;
>     private final int queueSize;
>     private final boolean blocking;
>     private final long shutdownTimeout;
> @@ -173,19 +168,19 @@ public final class AsyncAppender extends 
> AbstractAppender {
> 
>     private boolean enqueueOrBlockIfQueueFull(final LogEvent logEvent) {
>         boolean appendSuccessful;
> -        final Serializable serialized = Log4jLogEvent.serialize(logEvent, 
> includeLocation);
> +        final Log4jLogEvent frozenLogEvent = 
> Log4jLogEvent.createMemento(logEvent, includeLocation);
>         try {
>             // wait for free slots in the queue
> -            queue.put(serialized);
> +            queue.put(frozenLogEvent);
>             appendSuccessful = true;
>         } catch (final InterruptedException e) {
> -            appendSuccessful = handleInterruptedException(serialized);
> +            appendSuccessful = handleInterruptedException(frozenLogEvent);
>         }
>         return appendSuccessful;
>     }
> 
>     private boolean enqueueOrDropIfQueueFull(final LogEvent logEvent) {
> -        final boolean appendSuccessful = 
> queue.offer(Log4jLogEvent.serialize(logEvent, includeLocation));
> +        final boolean appendSuccessful = 
> queue.offer(Log4jLogEvent.createMemento(logEvent, includeLocation));
>         if (!appendSuccessful) {
>             error("Appender " + getName() + " is unable to write primary 
> appenders. queue is full");
>         }
> @@ -203,8 +198,8 @@ public final class AsyncAppender extends AbstractAppender 
> {
>     // This may interfere with the application's expectation of
>     // being interrupted, so when we are done, we set the interrupted
>     // flag again.
> -    private boolean handleInterruptedException(final Serializable 
> serialized) {
> -        final boolean appendSuccessful = queue.offer(serialized);
> +    private boolean handleInterruptedException(final Log4jLogEvent 
> frozenLogEvent) {
> +        final boolean appendSuccessful = queue.offer(frozenLogEvent);
>         if (!appendSuccessful) {
>             LOGGER.warn("Interrupted while waiting for a free slot in the 
> AsyncAppender LogEvent-queue {}",
>                     getName());
> @@ -269,9 +264,9 @@ public final class AsyncAppender extends AbstractAppender 
> {
> 
>         private volatile boolean shutdown = false;
>         private final List<AppenderControl> appenders;
> -        private final BlockingQueue<Serializable> queue;
> +        private final BlockingQueue<LogEvent> queue;
> 
> -        public AsyncThread(final List<AppenderControl> appenders, final 
> BlockingQueue<Serializable> queue) {
> +        public AsyncThread(final List<AppenderControl> appenders, final 
> BlockingQueue<LogEvent> queue) {
>             this.appenders = appenders;
>             this.queue = queue;
>             setDaemon(true);
> @@ -281,17 +276,16 @@ public final class AsyncAppender extends 
> AbstractAppender {
>         @Override
>         public void run() {
>             while (!shutdown) {
> -                Serializable s;
> +                LogEvent event;
>                 try {
> -                    s = queue.take();
> -                    if (s != null && s instanceof String && 
> SHUTDOWN.equals(s.toString())) {
> +                    event = queue.take();
> +                    if (event == SHUTDOWN) {
>                         shutdown = true;
>                         continue;
>                     }
>                 } catch (final InterruptedException ex) {
>                     break; // LOG4J2-830
>                 }
> -                final Log4jLogEvent event = Log4jLogEvent.deserialize(s);
>                 event.setEndOfBatch(queue.isEmpty());
>                 final boolean success = callAppenders(event);
>                 if (!success && errorAppender != null) {
> @@ -309,15 +303,15 @@ public final class AsyncAppender extends 
> AbstractAppender {
>             int ignored = 0;
>             while (!queue.isEmpty()) {
>                 try {
> -                    final Serializable s = queue.take();
> -                    if (Log4jLogEvent.canDeserialize(s)) {
> -                        final Log4jLogEvent event = 
> Log4jLogEvent.deserialize(s);
> -                        event.setEndOfBatch(queue.isEmpty());
> -                        callAppenders(event);
> +                    final LogEvent event = queue.take();
> +                    if (event instanceof Log4jLogEvent) {
> +                        final Log4jLogEvent logEvent = (Log4jLogEvent) event;
> +                        logEvent.setEndOfBatch(queue.isEmpty());
> +                        callAppenders(logEvent);
>                         count++;
>                     } else {
>                         ignored++;
> -                        LOGGER.trace("Ignoring event of class {}", 
> s.getClass().getName());
> +                        LOGGER.trace("Ignoring event of class {}", 
> event.getClass().getName());
>                     }
>                 } catch (final InterruptedException ex) {
>                     // May have been interrupted to shut down.
> 
> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/1b134cf3/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/Log4jLogEvent.java
> ----------------------------------------------------------------------
> diff --git 
> a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/Log4jLogEvent.java
>  
> b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/Log4jLogEvent.java
> index 776fba7..7c9bcbf 100644
> --- 
> a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/Log4jLogEvent.java
> +++ 
> b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/Log4jLogEvent.java
> @@ -670,6 +670,16 @@ public Log4jLogEvent(final String loggerName, final 
> Marker marker, final String
>         throw new InvalidObjectException("Proxy required");
>     }
> 
> +    /**
> +     * Creates and returns a new immutable copy of this {@code 
> Log4jLogEvent}.
> +     *
> +     * @return a new immutable copy of the data in this {@code Log4jLogEvent}
> +     */
> +    public static Log4jLogEvent createMemento(LogEvent event, final boolean 
> includeLocation) {
> +        // TODO implement Log4jLogEvent.createMemento()
> +        return deserialize(serialize(event, includeLocation));
> +    }
> +
>     @Override
>     public String toString() {
>         final StringBuilder sb = new StringBuilder();
> 
> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/1b134cf3/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/MutableLogEvent.java
> ----------------------------------------------------------------------
> diff --git 
> a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/MutableLogEvent.java
>  
> b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/MutableLogEvent.java
> index 7fd31c0..be4ba24 100644
> --- 
> a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/MutableLogEvent.java
> +++ 
> b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/MutableLogEvent.java
> @@ -415,4 +415,15 @@ public class MutableLogEvent implements LogEvent, 
> ReusableMessage {
>     private void readObject(final ObjectInputStream stream) throws 
> InvalidObjectException {
>         throw new InvalidObjectException("Proxy required");
>     }
> +
> +    /**
> +     * Creates and returns a new immutable copy of this {@code 
> MutableLogEvent}.
> +     *
> +     * @return a new immutable copy of the data in this {@code 
> MutableLogEvent}
> +     */
> +    public Log4jLogEvent createMemento() {
> +        // TODO implement MutableLogEvent.createMemento()
> +        return Log4jLogEvent.deserialize(Log4jLogEvent.serialize(this, 
> includeLocation));
> +    }
> +
> }
> 
> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/1b134cf3/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/AbstractJacksonLayout.java
> ----------------------------------------------------------------------
> diff --git 
> a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/AbstractJacksonLayout.java
>  
> b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/AbstractJacksonLayout.java
> index 22e2d36..b3bad36 100644
> --- 
> a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/AbstractJacksonLayout.java
> +++ 
> b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/AbstractJacksonLayout.java
> @@ -75,7 +75,7 @@ abstract class AbstractJacksonLayout extends 
> AbstractStringLayout {
>         // TODO Need to set up the same filters for MutableLogEvent but don't 
> know how...
>         // This is a workaround.
>         return event instanceof MutableLogEvent
> -                ? Log4jLogEvent.deserialize(Log4jLogEvent.serialize(event, 
> event.isIncludeLocation()))
> +                ? ((MutableLogEvent) event).createMemento()
>                 : event;
>     }
> 
> 
> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/1b134cf3/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 ab1d5c7..6683f1d 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
> @@ -88,7 +88,7 @@ public class SmtpManager extends AbstractManager {
>         if (event instanceof Log4jLogEvent && event.getMessage() instanceof 
> ReusableMessage) {
>             ((Log4jLogEvent) event).makeMessageImmutable();
>         } else if (event instanceof MutableLogEvent) {
> -            event = Log4jLogEvent.deserialize(Log4jLogEvent.serialize(event, 
> event.isIncludeLocation()));
> +            event = ((MutableLogEvent) event).createMemento();
>         }
>         buffer.add(event);
>     }
> 
> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/1b134cf3/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 acab7c1..cc897ea 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
> @@ -88,7 +88,7 @@ public class ListAppender extends AbstractAppender {
>         if (layout == null) {
>             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())));
> +                events.add(((MutableLogEvent) event).createMemento());
>             } else {
>                 events.add(event);
>             }
> 
> 

Reply via email to