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.
