OK, I have imported the Code Style settings into my IDE (IntelliJ IDEA),
and reformatted AsyncAppender.java.

On Tue, May 3, 2016 at 2:45 AM, Gary Gregory <[email protected]> wrote:

> Yeah, I'm not a fan of wildcard imports either.
>
> Gary
>
> On Mon, May 2, 2016 at 5:40 PM, Ralph Goers <[email protected]>
> wrote:
>
>> You need to review 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);
>>             }
>>
>>
>>
>>
>
>
> --
> E-Mail: [email protected] | [email protected]
> Java Persistence with Hibernate, Second Edition
> <http://www.manning.com/bauer3/>
> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
> Spring Batch in Action <http://www.manning.com/templier/>
> Blog: http://garygregory.wordpress.com
> Home: http://garygregory.com/
> Tweet! http://twitter.com/GaryGregory
>



-- 
[image: MagineTV]

*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.

Reply via email to