You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by mi...@apache.org on 2016/04/27 19:04:09 UTC
logging-log4j2 git commit: LogEvent memento
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 <mi...@magine.com>
Authored: Wed Apr 27 19:04:01 2016 +0200
Committer: Mikael Ståldal <mi...@magine.com>
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);
}
Re: logging-log4j2 git commit: LogEvent memento
Posted by Mikael Ståldal <mi...@magine.com>.
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 <ga...@gmail.com> wrote:
> Yeah, I'm not a fan of wildcard imports either.
>
> Gary
>
> On Mon, May 2, 2016 at 5:40 PM, Ralph Goers <ra...@dslextreme.com>
> 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, mikes@apache.org 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 <mi...@magine.com>
>> Authored: Wed Apr 27 19:04:01 2016 +0200
>> Committer: Mikael Ståldal <mi...@magine.com>
>> 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: garydgregory@gmail.com | ggregory@apache.org
> 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*
mikael.staldal@magine.com
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.
Re: logging-log4j2 git commit: LogEvent memento
Posted by Gary Gregory <ga...@gmail.com>.
Yeah, I'm not a fan of wildcard imports either.
Gary
On Mon, May 2, 2016 at 5:40 PM, Ralph Goers <ra...@dslextreme.com>
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, mikes@apache.org 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 <mi...@magine.com>
> Authored: Wed Apr 27 19:04:01 2016 +0200
> Committer: Mikael Ståldal <mi...@magine.com>
> 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: garydgregory@gmail.com | ggregory@apache.org
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
Re: logging-log4j2 git commit: LogEvent memento
Posted by Ralph Goers <ra...@dslextreme.com>.
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, mikes@apache.org 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 <mi...@magine.com>
> Authored: Wed Apr 27 19:04:01 2016 +0200
> Committer: Mikael Ståldal <mi...@magine.com>
> 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);
> }
>
>