Repository: logging-log4j2 Updated Branches: refs/heads/feature/LOG4J2-1430 aad08e764 -> 059df7f57
Use TransferQueue::tryTransfer() when available in AsyncAppender Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/059df7f5 Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/059df7f5 Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/059df7f5 Branch: refs/heads/feature/LOG4J2-1430 Commit: 059df7f57ec84b4a5b062616138aedd83cd626bb Parents: aad08e7 Author: Matt Sicker <boa...@gmail.com> Authored: Sat Jun 18 14:01:49 2016 -0500 Committer: Matt Sicker <boa...@gmail.com> Committed: Sat Jun 18 14:01:49 2016 -0500 ---------------------------------------------------------------------- .../apache/logging/log4j/core/appender/AsyncAppender.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/059df7f5/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 f7aa381..200a5b4 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 @@ -20,6 +20,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.concurrent.BlockingQueue; +import java.util.concurrent.TransferQueue; import java.util.concurrent.atomic.AtomicLong; import org.apache.logging.log4j.core.AbstractLogEvent; @@ -151,7 +152,7 @@ public final class AsyncAppender extends AbstractAppender { logEvent.getMessage().getFormattedMessage(); // LOG4J2-763: ask message to freeze parameters } final Log4jLogEvent memento = Log4jLogEvent.createMemento(logEvent, includeLocation); - if (!queue.offer(memento)) { + if (!transfer(memento)) { if (blocking) { // delegate to the event router (which may discard, enqueue and block, or log in current thread) final EventRoute route = asyncQueueFullPolicy.getRoute(thread.getId(), memento.getLevel()); @@ -163,6 +164,12 @@ public final class AsyncAppender extends AbstractAppender { } } + private boolean transfer(final LogEvent memento) { + return queue instanceof TransferQueue + ? ((TransferQueue<LogEvent>) queue).tryTransfer(memento) + : queue.offer(memento); + } + /** * FOR INTERNAL USE ONLY. *