You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4j-dev@logging.apache.org by Ralph Goers <ra...@dslextreme.com> on 2016/09/05 16:54:55 UTC

Re: [13/36] logging-log4j2 git commit: Convert BlockingQueueFactory into a plugin element

For the record, I am voting -1 on this commit.  It breaks the build because the DisruptorBlockingQueueFactory has a dependency that requires Java 8. The 2.7 release is blocked until this is corrected.

Ralph

> On Sep 4, 2016, at 11:38 AM, mattsicker@apache.org wrote:
> 
> Convert BlockingQueueFactory into a plugin element
> 
> Related to LOG4J2-1430.
> 
> 
> Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
> Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/65ec9bce
> Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/65ec9bce
> Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/65ec9bce
> 
> Branch: refs/heads/master
> Commit: 65ec9bcef74dc30ecab9c2091c6e0638d53490d8
> Parents: 0848d7a
> Author: Matt Sicker <bo...@gmail.com>
> Authored: Fri Jun 17 18:51:08 2016 -0500
> Committer: Matt Sicker <bo...@gmail.com>
> Committed: Fri Jun 17 18:51:08 2016 -0500
> 
> ----------------------------------------------------------------------
> .../log4j/core/appender/AsyncAppender.java      | 24 +++++++++---
> .../core/async/ArrayBlockingQueueFactory.java   | 10 +++++
> .../log4j/core/async/BlockingQueueFactory.java  | 13 ++++++-
> .../async/DisruptorBlockingQueueFactory.java    | 11 +++++-
> .../core/async/LinkedTransferQueueFactory.java  | 10 +++++
> .../log4j/core/appender/AsyncAppenderTest.java  | 16 ++++----
> .../BlockingQueueFactory-ArrayBlockingQueue.xml | 40 ++++++++++++++++++++
> ...ckingQueueFactory-DisruptorBlockingQueue.xml | 40 ++++++++++++++++++++
> ...BlockingQueueFactory-LinkedTransferQueue.xml | 40 ++++++++++++++++++++
> 9 files changed, 189 insertions(+), 15 deletions(-)
> ----------------------------------------------------------------------
> 
> 
> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/65ec9bce/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 3c9c37c..dee5e50 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
> @@ -26,8 +26,11 @@ 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;
> +import org.apache.logging.log4j.core.async.ArrayBlockingQueueFactory;
> import org.apache.logging.log4j.core.async.AsyncQueueFullPolicy;
> import org.apache.logging.log4j.core.async.AsyncQueueFullPolicyFactory;
> +import org.apache.logging.log4j.core.async.BlockingQueueFactory;
> +import org.apache.logging.log4j.core.async.BlockingQueueFactoryUtil;
> import org.apache.logging.log4j.core.async.DiscardingAsyncQueueFullPolicy;
> import org.apache.logging.log4j.core.async.EventRoute;
> import org.apache.logging.log4j.core.config.AppenderControl;
> @@ -42,7 +45,6 @@ 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.validation.constraints.Required;
> import org.apache.logging.log4j.core.impl.Log4jLogEvent;
> -import org.apache.logging.log4j.core.async.BlockingQueueFactoryUtil;
> import org.apache.logging.log4j.core.util.Constants;
> 
> /**
> @@ -73,8 +75,8 @@ public final class AsyncAppender extends AbstractAppender {
> 
>     private AsyncAppender(final String name, final Filter filter, final AppenderRef[] appenderRefs,
>                           final String errorRef, final int queueSize, final boolean blocking,
> -                          final boolean ignoreExceptions,
> -                          final long shutdownTimeout, final Configuration config, final boolean includeLocation) {
> +                          final boolean ignoreExceptions, final long shutdownTimeout, final Configuration config,
> +                          final boolean includeLocation, final BlockingQueueFactory<LogEvent> blockingQueueFactory) {
>         super(name, filter, null, ignoreExceptions);
>         this.queue = BlockingQueueFactoryUtil.<LogEvent>getBlockingQueueFactory().create(queueSize);
>         this.queueSize = queueSize;
> @@ -217,7 +219,9 @@ public final class AsyncAppender extends AbstractAppender {
>     }
> 
>     /**
> -     * Create an AsyncAppender.
> +     * Create an AsyncAppender. This method is retained for backwards compatibility. New code should use the
> +     * {@link Builder} instead. This factory will use {@link ArrayBlockingQueueFactory} by default as was the behavior
> +     * pre-2.7.
>      *
>      * @param appenderRefs     The Appenders to reference.
>      * @param errorRef         An optional Appender to write to if the queue is full or other errors occur.
> @@ -247,7 +251,7 @@ public final class AsyncAppender extends AbstractAppender {
>         }
> 
>         return new AsyncAppender(name, filter, appenderRefs, errorRef, size, blocking, ignoreExceptions,
> -            shutdownTimeout, config, includeLocation);
> +            shutdownTimeout, config, includeLocation, new ArrayBlockingQueueFactory<LogEvent>());
>     }
> 
>     @PluginBuilderFactory
> @@ -290,6 +294,9 @@ public final class AsyncAppender extends AbstractAppender {
>         @PluginBuilderAttribute
>         private boolean ignoreExceptions = true;
> 
> +        @PluginElement(BlockingQueueFactory.ELEMENT_TYPE)
> +        private BlockingQueueFactory<LogEvent> blockingQueueFactory = new ArrayBlockingQueueFactory<>();
> +
>         public Builder setAppenderRefs(AppenderRef[] appenderRefs) {
>             this.appenderRefs = appenderRefs;
>             return this;
> @@ -340,10 +347,15 @@ public final class AsyncAppender extends AbstractAppender {
>             return this;
>         }
> 
> +        public Builder setBlockingQueueFactory(final BlockingQueueFactory<LogEvent> blockingQueueFactory) {
> +            this.blockingQueueFactory = blockingQueueFactory;
> +            return this;
> +        }
> +
>         @Override
>         public AsyncAppender build() {
>             return new AsyncAppender(name, filter, appenderRefs, errorRef, bufferSize, blocking, ignoreExceptions,
> -                shutdownTimeout, configuration, includeLocation);
> +                shutdownTimeout, configuration, includeLocation, blockingQueueFactory);
>         }
>     }
> 
> 
> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/65ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/core/async/ArrayBlockingQueueFactory.java
> ----------------------------------------------------------------------
> diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/ArrayBlockingQueueFactory.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/ArrayBlockingQueueFactory.java
> index e9c99b8..dcad78a 100644
> --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/ArrayBlockingQueueFactory.java
> +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/ArrayBlockingQueueFactory.java
> @@ -3,14 +3,24 @@ package org.apache.logging.log4j.core.async;
> import java.util.concurrent.ArrayBlockingQueue;
> import java.util.concurrent.BlockingQueue;
> 
> +import org.apache.logging.log4j.core.config.Node;
> +import org.apache.logging.log4j.core.config.plugins.Plugin;
> +import org.apache.logging.log4j.core.config.plugins.PluginFactory;
> +
> /**
>  * Factory for creating instances of {@link ArrayBlockingQueue}.
>  *
>  * @since 2.7
>  */
> +@Plugin(name = "ArrayBlockingQueue", category = Node.CATEGORY, elementType = BlockingQueueFactory.ELEMENT_TYPE)
> public class ArrayBlockingQueueFactory<E> implements BlockingQueueFactory<E> {
>     @Override
>     public BlockingQueue<E> create(int capacity) {
>         return new ArrayBlockingQueue<>(capacity);
>     }
> +
> +    @PluginFactory
> +    public static <E> ArrayBlockingQueueFactory<E> createFactory() {
> +        return new ArrayBlockingQueueFactory<>();
> +    }
> }
> 
> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/65ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/core/async/BlockingQueueFactory.java
> ----------------------------------------------------------------------
> diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/BlockingQueueFactory.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/BlockingQueueFactory.java
> index ccd1625..5763d1e 100644
> --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/BlockingQueueFactory.java
> +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/BlockingQueueFactory.java
> @@ -9,7 +9,18 @@ import java.util.concurrent.BlockingQueue;
>  */
> public interface BlockingQueueFactory<E> {
> 
> -    String PROPERTY = "log4j.BlockingQueueFactory";
> +    /**
> +     * The {@link org.apache.logging.log4j.core.config.plugins.Plugin#elementType() element type} to use for plugins
> +     * implementing this interface.
> +     */
> +    String ELEMENT_TYPE = "BlockingQueueFactory";
> 
> +    /**
> +     * Creates a new BlockingQueue with the specified maximum capacity. Note that not all implementations of
> +     * BlockingQueue support a bounded capacity in which case the value is ignored.
> +     *
> +     * @param capacity maximum size of the queue if supported
> +     * @return a new BlockingQueue
> +     */
>     BlockingQueue<E> create(int capacity);
> }
> 
> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/65ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/core/async/DisruptorBlockingQueueFactory.java
> ----------------------------------------------------------------------
> diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/DisruptorBlockingQueueFactory.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/DisruptorBlockingQueueFactory.java
> index 8fb3707..add375d 100644
> --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/DisruptorBlockingQueueFactory.java
> +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/DisruptorBlockingQueueFactory.java
> @@ -3,15 +3,24 @@ package org.apache.logging.log4j.core.async;
> import java.util.concurrent.BlockingQueue;
> 
> import com.conversantmedia.util.concurrent.DisruptorBlockingQueue;
> +import org.apache.logging.log4j.core.config.Node;
> +import org.apache.logging.log4j.core.config.plugins.Plugin;
> +import org.apache.logging.log4j.core.config.plugins.PluginFactory;
> 
> /**
>  * Factory for creating instances of {@link DisruptorBlockingQueue}.
>  *
>  * @since 2.7
>  */
> +@Plugin(name = "DisruptorBlockingQueue", category = Node.CATEGORY, elementType = BlockingQueueFactory.ELEMENT_TYPE)
> public class DisruptorBlockingQueueFactory<E> implements BlockingQueueFactory<E> {
>     @Override
>     public BlockingQueue<E> create(int capacity) {
> -        return new DisruptorBlockingQueue<E>(capacity);
> +        return new DisruptorBlockingQueue<>(capacity);
> +    }
> +
> +    @PluginFactory
> +    public static <E> DisruptorBlockingQueueFactory<E> createFactory() {
> +        return new DisruptorBlockingQueueFactory<>();
>     }
> }
> 
> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/65ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/core/async/LinkedTransferQueueFactory.java
> ----------------------------------------------------------------------
> diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/LinkedTransferQueueFactory.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/LinkedTransferQueueFactory.java
> index 862fab3..6ab24e7 100644
> --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/LinkedTransferQueueFactory.java
> +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/LinkedTransferQueueFactory.java
> @@ -20,14 +20,24 @@ package org.apache.logging.log4j.core.async;
> import java.util.concurrent.BlockingQueue;
> import java.util.concurrent.LinkedTransferQueue;
> 
> +import org.apache.logging.log4j.core.config.Node;
> +import org.apache.logging.log4j.core.config.plugins.Plugin;
> +import org.apache.logging.log4j.core.config.plugins.PluginFactory;
> +
> /**
>  * Factory for creating instances of {@link LinkedTransferQueue}.
>  *
>  * @since 2.7
>  */
> +@Plugin(name = "LinkedTransferQueue", category = Node.CATEGORY, elementType = BlockingQueueFactory.ELEMENT_TYPE)
> public class LinkedTransferQueueFactory<E> implements BlockingQueueFactory<E> {
>     @Override
>     public BlockingQueue<E> create(int capacity) {
>         return new LinkedTransferQueue<>();
>     }
> +
> +    @PluginFactory
> +    public static <E> LinkedTransferQueueFactory<E> createFactory() {
> +        return new LinkedTransferQueueFactory<>();
> +    }
> }
> 
> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/65ec9bce/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/AsyncAppenderTest.java
> ----------------------------------------------------------------------
> diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/AsyncAppenderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/AsyncAppenderTest.java
> index 3066f38..076fdd0 100644
> --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/AsyncAppenderTest.java
> +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/AsyncAppenderTest.java
> @@ -41,19 +41,21 @@ import static org.junit.Assert.*;
>  */
> @RunWith(Parameterized.class)
> public class AsyncAppenderTest {
> -    private static final String CONFIG = "log4j-asynch.xml";
> 
>     @Parameterized.Parameters
>     public static Object[] data() {
> -        return new Class<?>[]{
> -            ArrayBlockingQueueFactory.class,
> -            DisruptorBlockingQueueFactory.class,
> -            LinkedTransferQueueFactory.class
> +        return new String[]{
> +            // default async config uses array blocking queue
> +            "log4j-asynch.xml",
> +            // override default blocking queue implementations
> +            "BlockingQueueFactory-ArrayBlockingQueue.xml",
> +            "BlockingQueueFactory-DisruptorBlockingQueue.xml",
> +            "BlockingQueueFactory-LinkedTransferQueue.xml"
>         };
>     }
> 
> -    public AsyncAppenderTest(final Class<? extends BlockingQueueFactory> factory) {
> -        context = new LoggerContextRule(CONFIG).withSystemProperty(BlockingQueueFactory.PROPERTY, factory.getName());
> +    public AsyncAppenderTest(final String configFileName) {
> +        context = new LoggerContextRule(configFileName);
>     }
> 
>     @Rule
> 
> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/65ec9bce/log4j-core/src/test/resources/BlockingQueueFactory-ArrayBlockingQueue.xml
> ----------------------------------------------------------------------
> diff --git a/log4j-core/src/test/resources/BlockingQueueFactory-ArrayBlockingQueue.xml b/log4j-core/src/test/resources/BlockingQueueFactory-ArrayBlockingQueue.xml
> new file mode 100644
> index 0000000..e8bbfa6
> --- /dev/null
> +++ b/log4j-core/src/test/resources/BlockingQueueFactory-ArrayBlockingQueue.xml
> @@ -0,0 +1,40 @@
> +<?xml version="1.0" encoding="UTF-8"?>
> +<!--
> + Licensed to the Apache Software Foundation (ASF) under one or more
> + contributor license agreements.  See the NOTICE file distributed with
> + this work for additional information regarding copyright ownership.
> + The ASF licenses this file to You under the Apache License, Version 2.0
> + (the "License"); you may not use this file except in compliance with
> + the License.  You may obtain a copy of the License at
> +
> +      http://www.apache.org/licenses/LICENSE-2.0
> +
> + Unless required by applicable law or agreed to in writing, software
> + distributed under the License is distributed on an "AS IS" BASIS,
> + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
> + See the License for the specific language governing permissions and
> + limitations under the License.
> +
> +-->
> +<Configuration status="OFF" name="ArrayBlockingQueueFactory">
> +
> +  <Appenders>
> +    <Console name="STDOUT">
> +      <PatternLayout pattern="%m%n"/>
> +    </Console>
> +    <List name="List">
> +      <PatternLayout pattern="%C %M %m"/>
> +    </List>
> +    <Async name="Async" includeLocation="true" error-ref="STDOUT">
> +      <AppenderRef ref="List"/>
> +      <ArrayBlockingQueue/>
> +    </Async>
> +  </Appenders>
> +
> +  <Loggers>
> +    <Root level="debug">
> +      <AppenderRef ref="Async"/>
> +    </Root>
> +  </Loggers>
> +
> +</Configuration>
> \ No newline at end of file
> 
> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/65ec9bce/log4j-core/src/test/resources/BlockingQueueFactory-DisruptorBlockingQueue.xml
> ----------------------------------------------------------------------
> diff --git a/log4j-core/src/test/resources/BlockingQueueFactory-DisruptorBlockingQueue.xml b/log4j-core/src/test/resources/BlockingQueueFactory-DisruptorBlockingQueue.xml
> new file mode 100644
> index 0000000..268cca7
> --- /dev/null
> +++ b/log4j-core/src/test/resources/BlockingQueueFactory-DisruptorBlockingQueue.xml
> @@ -0,0 +1,40 @@
> +<?xml version="1.0" encoding="UTF-8"?>
> +<!--
> + Licensed to the Apache Software Foundation (ASF) under one or more
> + contributor license agreements.  See the NOTICE file distributed with
> + this work for additional information regarding copyright ownership.
> + The ASF licenses this file to You under the Apache License, Version 2.0
> + (the "License"); you may not use this file except in compliance with
> + the License.  You may obtain a copy of the License at
> +
> +      http://www.apache.org/licenses/LICENSE-2.0
> +
> + Unless required by applicable law or agreed to in writing, software
> + distributed under the License is distributed on an "AS IS" BASIS,
> + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
> + See the License for the specific language governing permissions and
> + limitations under the License.
> +
> +-->
> +<Configuration status="OFF" name="DisruptorBlockingQueueFactory">
> +
> +  <Appenders>
> +    <Console name="STDOUT">
> +      <PatternLayout pattern="%m%n"/>
> +    </Console>
> +    <List name="List">
> +      <PatternLayout pattern="%C %M %m"/>
> +    </List>
> +    <Async name="Async" includeLocation="true" error-ref="STDOUT">
> +      <AppenderRef ref="List"/>
> +      <DisruptorBlockingQueue/>
> +    </Async>
> +  </Appenders>
> +
> +  <Loggers>
> +    <Root level="debug">
> +      <AppenderRef ref="Async"/>
> +    </Root>
> +  </Loggers>
> +
> +</Configuration>
> \ No newline at end of file
> 
> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/65ec9bce/log4j-core/src/test/resources/BlockingQueueFactory-LinkedTransferQueue.xml
> ----------------------------------------------------------------------
> diff --git a/log4j-core/src/test/resources/BlockingQueueFactory-LinkedTransferQueue.xml b/log4j-core/src/test/resources/BlockingQueueFactory-LinkedTransferQueue.xml
> new file mode 100644
> index 0000000..13063d3
> --- /dev/null
> +++ b/log4j-core/src/test/resources/BlockingQueueFactory-LinkedTransferQueue.xml
> @@ -0,0 +1,40 @@
> +<?xml version="1.0" encoding="UTF-8"?>
> +<!--
> + Licensed to the Apache Software Foundation (ASF) under one or more
> + contributor license agreements.  See the NOTICE file distributed with
> + this work for additional information regarding copyright ownership.
> + The ASF licenses this file to You under the Apache License, Version 2.0
> + (the "License"); you may not use this file except in compliance with
> + the License.  You may obtain a copy of the License at
> +
> +      http://www.apache.org/licenses/LICENSE-2.0
> +
> + Unless required by applicable law or agreed to in writing, software
> + distributed under the License is distributed on an "AS IS" BASIS,
> + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
> + See the License for the specific language governing permissions and
> + limitations under the License.
> +
> +-->
> +<Configuration status="OFF" name="LinkedTransferQueueFactory">
> +
> +  <Appenders>
> +    <Console name="STDOUT">
> +      <PatternLayout pattern="%m%n"/>
> +    </Console>
> +    <List name="List">
> +      <PatternLayout pattern="%C %M %m"/>
> +    </List>
> +    <Async name="Async" includeLocation="true" error-ref="STDOUT">
> +      <AppenderRef ref="List"/>
> +      <LinkedTransferQueue/>
> +    </Async>
> +  </Appenders>
> +
> +  <Loggers>
> +    <Root level="debug">
> +      <AppenderRef ref="Async"/>
> +    </Root>
> +  </Loggers>
> +
> +</Configuration>
> \ No newline at end of file
> 
> 



---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-dev-unsubscribe@logging.apache.org
For additional commands, e-mail: log4j-dev-help@logging.apache.org


Re: [13/36] logging-log4j2 git commit: Convert BlockingQueueFactory into a plugin element

Posted by Gary Gregory <ga...@gmail.com>.
Hm, that failure appears to be random...

Gary

On Mon, Sep 5, 2016 at 5:18 PM, Gary Gregory <ga...@gmail.com> wrote:

> Locally, I get:
>
> Failed tests:
>   RoutingAppenderWithPurgingTest.routingTest:91 Incorrect number of
> appenders with IdlePurgePolicy. expected:<3> but was:<1>
>
> Gary
>
> On Mon, Sep 5, 2016 at 12:54 PM, Ralph Goers <ra...@dslextreme.com>
> wrote:
>
>> For the record, I am voting -1 on this commit.  It breaks the build
>> because the DisruptorBlockingQueueFactory has a dependency that requires
>> Java 8. The 2.7 release is blocked until this is corrected.
>>
>> Ralph
>>
>> > On Sep 4, 2016, at 11:38 AM, mattsicker@apache.org wrote:
>> >
>> > Convert BlockingQueueFactory into a plugin element
>> >
>> > Related to LOG4J2-1430.
>> >
>> >
>> > Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
>> > Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit
>> /65ec9bce
>> > Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/6
>> 5ec9bce
>> > Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/6
>> 5ec9bce
>> >
>> > Branch: refs/heads/master
>> > Commit: 65ec9bcef74dc30ecab9c2091c6e0638d53490d8
>> > Parents: 0848d7a
>> > Author: Matt Sicker <bo...@gmail.com>
>> > Authored: Fri Jun 17 18:51:08 2016 -0500
>> > Committer: Matt Sicker <bo...@gmail.com>
>> > Committed: Fri Jun 17 18:51:08 2016 -0500
>> >
>> > ----------------------------------------------------------------------
>> > .../log4j/core/appender/AsyncAppender.java      | 24 +++++++++---
>> > .../core/async/ArrayBlockingQueueFactory.java   | 10 +++++
>> > .../log4j/core/async/BlockingQueueFactory.java  | 13 ++++++-
>> > .../async/DisruptorBlockingQueueFactory.java    | 11 +++++-
>> > .../core/async/LinkedTransferQueueFactory.java  | 10 +++++
>> > .../log4j/core/appender/AsyncAppenderTest.java  | 16 ++++----
>> > .../BlockingQueueFactory-ArrayBlockingQueue.xml | 40
>> ++++++++++++++++++++
>> > ...ckingQueueFactory-DisruptorBlockingQueue.xml | 40
>> ++++++++++++++++++++
>> > ...BlockingQueueFactory-LinkedTransferQueue.xml | 40
>> ++++++++++++++++++++
>> > 9 files changed, 189 insertions(+), 15 deletions(-)
>> > ----------------------------------------------------------------------
>> >
>> >
>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>> 5ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/co
>> re/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/app
>> ender/AsyncAppender.java
>> > index 3c9c37c..dee5e50 100644
>> > --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/app
>> ender/AsyncAppender.java
>> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/app
>> ender/AsyncAppender.java
>> > @@ -26,8 +26,11 @@ 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;
>> > +import org.apache.logging.log4j.core.async.ArrayBlockingQueueFactory;
>> > import org.apache.logging.log4j.core.async.AsyncQueueFullPolicy;
>> > import org.apache.logging.log4j.core.async.AsyncQueueFullPolicyFactory;
>> > +import org.apache.logging.log4j.core.async.BlockingQueueFactory;
>> > +import org.apache.logging.log4j.core.async.BlockingQueueFactoryUtil;
>> > import org.apache.logging.log4j.core.async.DiscardingAsyncQueueFull
>> Policy;
>> > import org.apache.logging.log4j.core.async.EventRoute;
>> > import org.apache.logging.log4j.core.config.AppenderControl;
>> > @@ -42,7 +45,6 @@ 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.validation.cons
>> traints.Required;
>> > import org.apache.logging.log4j.core.impl.Log4jLogEvent;
>> > -import org.apache.logging.log4j.core.async.BlockingQueueFactoryUtil;
>> > import org.apache.logging.log4j.core.util.Constants;
>> >
>> > /**
>> > @@ -73,8 +75,8 @@ public final class AsyncAppender extends
>> AbstractAppender {
>> >
>> >     private AsyncAppender(final String name, final Filter filter, final
>> AppenderRef[] appenderRefs,
>> >                           final String errorRef, final int queueSize,
>> final boolean blocking,
>> > -                          final boolean ignoreExceptions,
>> > -                          final long shutdownTimeout, final
>> Configuration config, final boolean includeLocation) {
>> > +                          final boolean ignoreExceptions, final long
>> shutdownTimeout, final Configuration config,
>> > +                          final boolean includeLocation, final
>> BlockingQueueFactory<LogEvent> blockingQueueFactory) {
>> >         super(name, filter, null, ignoreExceptions);
>> >         this.queue = BlockingQueueFactoryUtil.<LogE
>> vent>getBlockingQueueFactory().create(queueSize);
>> >         this.queueSize = queueSize;
>> > @@ -217,7 +219,9 @@ public final class AsyncAppender extends
>> AbstractAppender {
>> >     }
>> >
>> >     /**
>> > -     * Create an AsyncAppender.
>> > +     * Create an AsyncAppender. This method is retained for backwards
>> compatibility. New code should use the
>> > +     * {@link Builder} instead. This factory will use {@link
>> ArrayBlockingQueueFactory} by default as was the behavior
>> > +     * pre-2.7.
>> >      *
>> >      * @param appenderRefs     The Appenders to reference.
>> >      * @param errorRef         An optional Appender to write to if the
>> queue is full or other errors occur.
>> > @@ -247,7 +251,7 @@ public final class AsyncAppender extends
>> AbstractAppender {
>> >         }
>> >
>> >         return new AsyncAppender(name, filter, appenderRefs, errorRef,
>> size, blocking, ignoreExceptions,
>> > -            shutdownTimeout, config, includeLocation);
>> > +            shutdownTimeout, config, includeLocation, new
>> ArrayBlockingQueueFactory<LogEvent>());
>> >     }
>> >
>> >     @PluginBuilderFactory
>> > @@ -290,6 +294,9 @@ public final class AsyncAppender extends
>> AbstractAppender {
>> >         @PluginBuilderAttribute
>> >         private boolean ignoreExceptions = true;
>> >
>> > +        @PluginElement(BlockingQueueFactory.ELEMENT_TYPE)
>> > +        private BlockingQueueFactory<LogEvent> blockingQueueFactory =
>> new ArrayBlockingQueueFactory<>();
>> > +
>> >         public Builder setAppenderRefs(AppenderRef[] appenderRefs) {
>> >             this.appenderRefs = appenderRefs;
>> >             return this;
>> > @@ -340,10 +347,15 @@ public final class AsyncAppender extends
>> AbstractAppender {
>> >             return this;
>> >         }
>> >
>> > +        public Builder setBlockingQueueFactory(final
>> BlockingQueueFactory<LogEvent> blockingQueueFactory) {
>> > +            this.blockingQueueFactory = blockingQueueFactory;
>> > +            return this;
>> > +        }
>> > +
>> >         @Override
>> >         public AsyncAppender build() {
>> >             return new AsyncAppender(name, filter, appenderRefs,
>> errorRef, bufferSize, blocking, ignoreExceptions,
>> > -                shutdownTimeout, configuration, includeLocation);
>> > +                shutdownTimeout, configuration, includeLocation,
>> blockingQueueFactory);
>> >         }
>> >     }
>> >
>> >
>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>> 5ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/co
>> re/async/ArrayBlockingQueueFactory.java
>> > ----------------------------------------------------------------------
>> > diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>> nc/ArrayBlockingQueueFactory.java b/log4j-core/src/main/java/org
>> /apache/logging/log4j/core/async/ArrayBlockingQueueFactory.java
>> > index e9c99b8..dcad78a 100644
>> > --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>> nc/ArrayBlockingQueueFactory.java
>> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>> nc/ArrayBlockingQueueFactory.java
>> > @@ -3,14 +3,24 @@ package org.apache.logging.log4j.core.async;
>> > import java.util.concurrent.ArrayBlockingQueue;
>> > import java.util.concurrent.BlockingQueue;
>> >
>> > +import org.apache.logging.log4j.core.config.Node;
>> > +import org.apache.logging.log4j.core.config.plugins.Plugin;
>> > +import org.apache.logging.log4j.core.config.plugins.PluginFactory;
>> > +
>> > /**
>> >  * Factory for creating instances of {@link ArrayBlockingQueue}.
>> >  *
>> >  * @since 2.7
>> >  */
>> > +@Plugin(name = "ArrayBlockingQueue", category = Node.CATEGORY,
>> elementType = BlockingQueueFactory.ELEMENT_TYPE)
>> > public class ArrayBlockingQueueFactory<E> implements
>> BlockingQueueFactory<E> {
>> >     @Override
>> >     public BlockingQueue<E> create(int capacity) {
>> >         return new ArrayBlockingQueue<>(capacity);
>> >     }
>> > +
>> > +    @PluginFactory
>> > +    public static <E> ArrayBlockingQueueFactory<E> createFactory() {
>> > +        return new ArrayBlockingQueueFactory<>();
>> > +    }
>> > }
>> >
>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>> 5ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/co
>> re/async/BlockingQueueFactory.java
>> > ----------------------------------------------------------------------
>> > diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/BlockingQueueFactory.java
>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>> nc/BlockingQueueFactory.java
>> > index ccd1625..5763d1e 100644
>> > --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>> nc/BlockingQueueFactory.java
>> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>> nc/BlockingQueueFactory.java
>> > @@ -9,7 +9,18 @@ import java.util.concurrent.BlockingQueue;
>> >  */
>> > public interface BlockingQueueFactory<E> {
>> >
>> > -    String PROPERTY = "log4j.BlockingQueueFactory";
>> > +    /**
>> > +     * The {@link org.apache.logging.log4j.core.
>> config.plugins.Plugin#elementType() element type} to use for plugins
>> > +     * implementing this interface.
>> > +     */
>> > +    String ELEMENT_TYPE = "BlockingQueueFactory";
>> >
>> > +    /**
>> > +     * Creates a new BlockingQueue with the specified maximum
>> capacity. Note that not all implementations of
>> > +     * BlockingQueue support a bounded capacity in which case the
>> value is ignored.
>> > +     *
>> > +     * @param capacity maximum size of the queue if supported
>> > +     * @return a new BlockingQueue
>> > +     */
>> >     BlockingQueue<E> create(int capacity);
>> > }
>> >
>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>> 5ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/co
>> re/async/DisruptorBlockingQueueFactory.java
>> > ----------------------------------------------------------------------
>> > diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>> nc/DisruptorBlockingQueueFactory.java b/log4j-core/src/main/java/org
>> /apache/logging/log4j/core/async/DisruptorBlockingQueueFactory.java
>> > index 8fb3707..add375d 100644
>> > --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>> nc/DisruptorBlockingQueueFactory.java
>> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>> nc/DisruptorBlockingQueueFactory.java
>> > @@ -3,15 +3,24 @@ package org.apache.logging.log4j.core.async;
>> > import java.util.concurrent.BlockingQueue;
>> >
>> > import com.conversantmedia.util.concurrent.DisruptorBlockingQueue;
>> > +import org.apache.logging.log4j.core.config.Node;
>> > +import org.apache.logging.log4j.core.config.plugins.Plugin;
>> > +import org.apache.logging.log4j.core.config.plugins.PluginFactory;
>> >
>> > /**
>> >  * Factory for creating instances of {@link DisruptorBlockingQueue}.
>> >  *
>> >  * @since 2.7
>> >  */
>> > +@Plugin(name = "DisruptorBlockingQueue", category = Node.CATEGORY,
>> elementType = BlockingQueueFactory.ELEMENT_TYPE)
>> > public class DisruptorBlockingQueueFactory<E> implements
>> BlockingQueueFactory<E> {
>> >     @Override
>> >     public BlockingQueue<E> create(int capacity) {
>> > -        return new DisruptorBlockingQueue<E>(capacity);
>> > +        return new DisruptorBlockingQueue<>(capacity);
>> > +    }
>> > +
>> > +    @PluginFactory
>> > +    public static <E> DisruptorBlockingQueueFactory<E>
>> createFactory() {
>> > +        return new DisruptorBlockingQueueFactory<>();
>> >     }
>> > }
>> >
>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>> 5ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/co
>> re/async/LinkedTransferQueueFactory.java
>> > ----------------------------------------------------------------------
>> > diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>> nc/LinkedTransferQueueFactory.java b/log4j-core/src/main/java/org
>> /apache/logging/log4j/core/async/LinkedTransferQueueFactory.java
>> > index 862fab3..6ab24e7 100644
>> > --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>> nc/LinkedTransferQueueFactory.java
>> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>> nc/LinkedTransferQueueFactory.java
>> > @@ -20,14 +20,24 @@ package org.apache.logging.log4j.core.async;
>> > import java.util.concurrent.BlockingQueue;
>> > import java.util.concurrent.LinkedTransferQueue;
>> >
>> > +import org.apache.logging.log4j.core.config.Node;
>> > +import org.apache.logging.log4j.core.config.plugins.Plugin;
>> > +import org.apache.logging.log4j.core.config.plugins.PluginFactory;
>> > +
>> > /**
>> >  * Factory for creating instances of {@link LinkedTransferQueue}.
>> >  *
>> >  * @since 2.7
>> >  */
>> > +@Plugin(name = "LinkedTransferQueue", category = Node.CATEGORY,
>> elementType = BlockingQueueFactory.ELEMENT_TYPE)
>> > public class LinkedTransferQueueFactory<E> implements
>> BlockingQueueFactory<E> {
>> >     @Override
>> >     public BlockingQueue<E> create(int capacity) {
>> >         return new LinkedTransferQueue<>();
>> >     }
>> > +
>> > +    @PluginFactory
>> > +    public static <E> LinkedTransferQueueFactory<E> createFactory() {
>> > +        return new LinkedTransferQueueFactory<>();
>> > +    }
>> > }
>> >
>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>> 5ec9bce/log4j-core/src/test/java/org/apache/logging/log4j/co
>> re/appender/AsyncAppenderTest.java
>> > ----------------------------------------------------------------------
>> > diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/AsyncAppenderTest.java
>> b/log4j-core/src/test/java/org/apache/logging/log4j/core/app
>> ender/AsyncAppenderTest.java
>> > index 3066f38..076fdd0 100644
>> > --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/app
>> ender/AsyncAppenderTest.java
>> > +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/app
>> ender/AsyncAppenderTest.java
>> > @@ -41,19 +41,21 @@ import static org.junit.Assert.*;
>> >  */
>> > @RunWith(Parameterized.class)
>> > public class AsyncAppenderTest {
>> > -    private static final String CONFIG = "log4j-asynch.xml";
>> >
>> >     @Parameterized.Parameters
>> >     public static Object[] data() {
>> > -        return new Class<?>[]{
>> > -            ArrayBlockingQueueFactory.class,
>> > -            DisruptorBlockingQueueFactory.class,
>> > -            LinkedTransferQueueFactory.class
>> > +        return new String[]{
>> > +            // default async config uses array blocking queue
>> > +            "log4j-asynch.xml",
>> > +            // override default blocking queue implementations
>> > +            "BlockingQueueFactory-ArrayBlockingQueue.xml",
>> > +            "BlockingQueueFactory-DisruptorBlockingQueue.xml",
>> > +            "BlockingQueueFactory-LinkedTransferQueue.xml"
>> >         };
>> >     }
>> >
>> > -    public AsyncAppenderTest(final Class<? extends
>> BlockingQueueFactory> factory) {
>> > -        context = new LoggerContextRule(CONFIG).with
>> SystemProperty(BlockingQueueFactory.PROPERTY, factory.getName());
>> > +    public AsyncAppenderTest(final String configFileName) {
>> > +        context = new LoggerContextRule(configFileName);
>> >     }
>> >
>> >     @Rule
>> >
>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>> 5ec9bce/log4j-core/src/test/resources/BlockingQueueFactory-A
>> rrayBlockingQueue.xml
>> > ----------------------------------------------------------------------
>> > diff --git a/log4j-core/src/test/resources/BlockingQueueFactory-ArrayBlockingQueue.xml
>> b/log4j-core/src/test/resources/BlockingQueueFactory-ArrayBl
>> ockingQueue.xml
>> > new file mode 100644
>> > index 0000000..e8bbfa6
>> > --- /dev/null
>> > +++ b/log4j-core/src/test/resources/BlockingQueueFactory-ArrayBl
>> ockingQueue.xml
>> > @@ -0,0 +1,40 @@
>> > +<?xml version="1.0" encoding="UTF-8"?>
>> > +<!--
>> > + Licensed to the Apache Software Foundation (ASF) under one or more
>> > + contributor license agreements.  See the NOTICE file distributed with
>> > + this work for additional information regarding copyright ownership.
>> > + The ASF licenses this file to You under the Apache License, Version
>> 2.0
>> > + (the "License"); you may not use this file except in compliance with
>> > + the License.  You may obtain a copy of the License at
>> > +
>> > +      http://www.apache.org/licenses/LICENSE-2.0
>> > +
>> > + Unless required by applicable law or agreed to in writing, software
>> > + distributed under the License is distributed on an "AS IS" BASIS,
>> > + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>> implied.
>> > + See the License for the specific language governing permissions and
>> > + limitations under the License.
>> > +
>> > +-->
>> > +<Configuration status="OFF" name="ArrayBlockingQueueFactory">
>> > +
>> > +  <Appenders>
>> > +    <Console name="STDOUT">
>> > +      <PatternLayout pattern="%m%n"/>
>> > +    </Console>
>> > +    <List name="List">
>> > +      <PatternLayout pattern="%C %M %m"/>
>> > +    </List>
>> > +    <Async name="Async" includeLocation="true" error-ref="STDOUT">
>> > +      <AppenderRef ref="List"/>
>> > +      <ArrayBlockingQueue/>
>> > +    </Async>
>> > +  </Appenders>
>> > +
>> > +  <Loggers>
>> > +    <Root level="debug">
>> > +      <AppenderRef ref="Async"/>
>> > +    </Root>
>> > +  </Loggers>
>> > +
>> > +</Configuration>
>> > \ No newline at end of file
>> >
>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>> 5ec9bce/log4j-core/src/test/resources/BlockingQueueFactory-D
>> isruptorBlockingQueue.xml
>> > ----------------------------------------------------------------------
>> > diff --git a/log4j-core/src/test/resources/BlockingQueueFactory-DisruptorBlockingQueue.xml
>> b/log4j-core/src/test/resources/BlockingQueueFactory-Disrupt
>> orBlockingQueue.xml
>> > new file mode 100644
>> > index 0000000..268cca7
>> > --- /dev/null
>> > +++ b/log4j-core/src/test/resources/BlockingQueueFactory-Disrupt
>> orBlockingQueue.xml
>> > @@ -0,0 +1,40 @@
>> > +<?xml version="1.0" encoding="UTF-8"?>
>> > +<!--
>> > + Licensed to the Apache Software Foundation (ASF) under one or more
>> > + contributor license agreements.  See the NOTICE file distributed with
>> > + this work for additional information regarding copyright ownership.
>> > + The ASF licenses this file to You under the Apache License, Version
>> 2.0
>> > + (the "License"); you may not use this file except in compliance with
>> > + the License.  You may obtain a copy of the License at
>> > +
>> > +      http://www.apache.org/licenses/LICENSE-2.0
>> > +
>> > + Unless required by applicable law or agreed to in writing, software
>> > + distributed under the License is distributed on an "AS IS" BASIS,
>> > + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>> implied.
>> > + See the License for the specific language governing permissions and
>> > + limitations under the License.
>> > +
>> > +-->
>> > +<Configuration status="OFF" name="DisruptorBlockingQueueFactory">
>> > +
>> > +  <Appenders>
>> > +    <Console name="STDOUT">
>> > +      <PatternLayout pattern="%m%n"/>
>> > +    </Console>
>> > +    <List name="List">
>> > +      <PatternLayout pattern="%C %M %m"/>
>> > +    </List>
>> > +    <Async name="Async" includeLocation="true" error-ref="STDOUT">
>> > +      <AppenderRef ref="List"/>
>> > +      <DisruptorBlockingQueue/>
>> > +    </Async>
>> > +  </Appenders>
>> > +
>> > +  <Loggers>
>> > +    <Root level="debug">
>> > +      <AppenderRef ref="Async"/>
>> > +    </Root>
>> > +  </Loggers>
>> > +
>> > +</Configuration>
>> > \ No newline at end of file
>> >
>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>> 5ec9bce/log4j-core/src/test/resources/BlockingQueueFactory-L
>> inkedTransferQueue.xml
>> > ----------------------------------------------------------------------
>> > diff --git a/log4j-core/src/test/resources/BlockingQueueFactory-LinkedTransferQueue.xml
>> b/log4j-core/src/test/resources/BlockingQueueFactory-LinkedT
>> ransferQueue.xml
>> > new file mode 100644
>> > index 0000000..13063d3
>> > --- /dev/null
>> > +++ b/log4j-core/src/test/resources/BlockingQueueFactory-LinkedT
>> ransferQueue.xml
>> > @@ -0,0 +1,40 @@
>> > +<?xml version="1.0" encoding="UTF-8"?>
>> > +<!--
>> > + Licensed to the Apache Software Foundation (ASF) under one or more
>> > + contributor license agreements.  See the NOTICE file distributed with
>> > + this work for additional information regarding copyright ownership.
>> > + The ASF licenses this file to You under the Apache License, Version
>> 2.0
>> > + (the "License"); you may not use this file except in compliance with
>> > + the License.  You may obtain a copy of the License at
>> > +
>> > +      http://www.apache.org/licenses/LICENSE-2.0
>> > +
>> > + Unless required by applicable law or agreed to in writing, software
>> > + distributed under the License is distributed on an "AS IS" BASIS,
>> > + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>> implied.
>> > + See the License for the specific language governing permissions and
>> > + limitations under the License.
>> > +
>> > +-->
>> > +<Configuration status="OFF" name="LinkedTransferQueueFactory">
>> > +
>> > +  <Appenders>
>> > +    <Console name="STDOUT">
>> > +      <PatternLayout pattern="%m%n"/>
>> > +    </Console>
>> > +    <List name="List">
>> > +      <PatternLayout pattern="%C %M %m"/>
>> > +    </List>
>> > +    <Async name="Async" includeLocation="true" error-ref="STDOUT">
>> > +      <AppenderRef ref="List"/>
>> > +      <LinkedTransferQueue/>
>> > +    </Async>
>> > +  </Appenders>
>> > +
>> > +  <Loggers>
>> > +    <Root level="debug">
>> > +      <AppenderRef ref="Async"/>
>> > +    </Root>
>> > +  </Loggers>
>> > +
>> > +</Configuration>
>> > \ No newline at end of file
>> >
>> >
>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: log4j-dev-unsubscribe@logging.apache.org
>> For additional commands, e-mail: log4j-dev-help@logging.apache.org
>>
>>
>
>
> --
> 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
>



-- 
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: [13/36] logging-log4j2 git commit: Convert BlockingQueueFactory into a plugin element

Posted by Mikael Ståldal <mi...@magine.com>.
Talking about that, it would be nice if the whole build process would work
on Java 8, last time I tried the "site" goal did not work with Java 8.

On Tue, Sep 6, 2016 at 6:06 PM, Matt Sicker <bo...@gmail.com> wrote:

> I can't believe I didn't notice it, but the Conversant library does
> require Java 8. It's an optional dependency, so what to do? We can build on
> Java 8 with a target for Java 7 and use the animal-sniffer Maven plugin to
> make sure we don't accidentally use anything from Java 8.
>
> On 5 September 2016 at 22:45, Matt Sicker <bo...@gmail.com> wrote:
>
>> It looks like I may have merged prematurely then. I think I've been
>> running builds using Java 8 as well and didn't notice this. Jenkins isn't
>> even loading for me, so I can't see what the problem is on there. I'll take
>> a look at this tomorrow, and if I can't fix the dependency issue, I'll back
>> out part of this feature for now.
>>
>> On 5 September 2016 at 17:03, Ralph Goers <ra...@dslextreme.com>
>> wrote:
>>
>>> Jenkins and the release builds use Java 7, so you should certainly use
>>> Java 7 from time to time.
>>>
>>> Ralph
>>>
>>> On Sep 5, 2016, at 2:33 PM, Gary Gregory <ga...@gmail.com> wrote:
>>>
>>> Ah, no, Java 8:
>>>
>>> Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5;
>>> 2015-11-10T08:41:47-08:00)
>>> Maven home: E:\Java\apache-maven-3.3.9
>>> Java version: 1.8.0_101, vendor: Oracle Corporation
>>> Java home: C:\Program Files\Java\jdk1.8.0_101\jre
>>> Default locale: en_US, platform encoding: Cp1252
>>> OS name: "windows 7", version: "6.1", arch: "amd64", family: "dos"
>>>
>>> Gary
>>>
>>> On Mon, Sep 5, 2016 at 5:32 PM, Ralph Goers <ra...@dslextreme.com>
>>> wrote:
>>>
>>>> And you are building with Java 7?
>>>>
>>>> Ralph
>>>>
>>>> On Sep 5, 2016, at 2:18 PM, Gary Gregory <ga...@gmail.com>
>>>> wrote:
>>>>
>>>> Locally, I get:
>>>>
>>>> Failed tests:
>>>>   RoutingAppenderWithPurgingTest.routingTest:91 Incorrect number of
>>>> appenders with IdlePurgePolicy. expected:<3> but was:<1>
>>>>
>>>> Gary
>>>>
>>>> On Mon, Sep 5, 2016 at 12:54 PM, Ralph Goers <
>>>> ralph.goers@dslextreme.com> wrote:
>>>>
>>>>> For the record, I am voting -1 on this commit.  It breaks the build
>>>>> because the DisruptorBlockingQueueFactory has a dependency that requires
>>>>> Java 8. The 2.7 release is blocked until this is corrected.
>>>>>
>>>>> Ralph
>>>>>
>>>>> > On Sep 4, 2016, at 11:38 AM, mattsicker@apache.org wrote:
>>>>> >
>>>>> > Convert BlockingQueueFactory into a plugin element
>>>>> >
>>>>> > Related to LOG4J2-1430.
>>>>> >
>>>>> >
>>>>> > Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
>>>>> > Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit
>>>>> /65ec9bce
>>>>> > Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/6
>>>>> 5ec9bce
>>>>> > Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/6
>>>>> 5ec9bce
>>>>> >
>>>>> > Branch: refs/heads/master
>>>>> > Commit: 65ec9bcef74dc30ecab9c2091c6e0638d53490d8
>>>>> > Parents: 0848d7a
>>>>> > Author: Matt Sicker <bo...@gmail.com>
>>>>> > Authored: Fri Jun 17 18:51:08 2016 -0500
>>>>> > Committer: Matt Sicker <bo...@gmail.com>
>>>>> > Committed: Fri Jun 17 18:51:08 2016 -0500
>>>>> >
>>>>> > ------------------------------------------------------------
>>>>> ----------
>>>>> > .../log4j/core/appender/AsyncAppender.java      | 24 +++++++++---
>>>>> > .../core/async/ArrayBlockingQueueFactory.java   | 10 +++++
>>>>> > .../log4j/core/async/BlockingQueueFactory.java  | 13 ++++++-
>>>>> > .../async/DisruptorBlockingQueueFactory.java    | 11 +++++-
>>>>> > .../core/async/LinkedTransferQueueFactory.java  | 10 +++++
>>>>> > .../log4j/core/appender/AsyncAppenderTest.java  | 16 ++++----
>>>>> > .../BlockingQueueFactory-ArrayBlockingQueue.xml | 40
>>>>> ++++++++++++++++++++
>>>>> > ...ckingQueueFactory-DisruptorBlockingQueue.xml | 40
>>>>> ++++++++++++++++++++
>>>>> > ...BlockingQueueFactory-LinkedTransferQueue.xml | 40
>>>>> ++++++++++++++++++++
>>>>> > 9 files changed, 189 insertions(+), 15 deletions(-)
>>>>> > ------------------------------------------------------------
>>>>> ----------
>>>>> >
>>>>> >
>>>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>>>> 5ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/co
>>>>> re/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/app
>>>>> ender/AsyncAppender.java
>>>>> > index 3c9c37c..dee5e50 100644
>>>>> > --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/app
>>>>> ender/AsyncAppender.java
>>>>> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/app
>>>>> ender/AsyncAppender.java
>>>>> > @@ -26,8 +26,11 @@ 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;
>>>>> > +import org.apache.logging.log4j.core.async.ArrayBlockingQueueFactor
>>>>> y;
>>>>> > import org.apache.logging.log4j.core.async.AsyncQueueFullPolicy;
>>>>> > import org.apache.logging.log4j.core.async.AsyncQueueFullPolicyFact
>>>>> ory;
>>>>> > +import org.apache.logging.log4j.core.async.BlockingQueueFactory;
>>>>> > +import org.apache.logging.log4j.core.async.BlockingQueueFactoryUtil
>>>>> ;
>>>>> > import org.apache.logging.log4j.core.async.DiscardingAsyncQueueFull
>>>>> Policy;
>>>>> > import org.apache.logging.log4j.core.async.EventRoute;
>>>>> > import org.apache.logging.log4j.core.config.AppenderControl;
>>>>> > @@ -42,7 +45,6 @@ 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.validation.cons
>>>>> traints.Required;
>>>>> > import org.apache.logging.log4j.core.impl.Log4jLogEvent;
>>>>> > -import org.apache.logging.log4j.core.async.BlockingQueueFactoryUtil
>>>>> ;
>>>>> > import org.apache.logging.log4j.core.util.Constants;
>>>>> >
>>>>> > /**
>>>>> > @@ -73,8 +75,8 @@ public final class AsyncAppender extends
>>>>> AbstractAppender {
>>>>> >
>>>>> >     private AsyncAppender(final String name, final Filter filter,
>>>>> final AppenderRef[] appenderRefs,
>>>>> >                           final String errorRef, final int
>>>>> queueSize, final boolean blocking,
>>>>> > -                          final boolean ignoreExceptions,
>>>>> > -                          final long shutdownTimeout, final
>>>>> Configuration config, final boolean includeLocation) {
>>>>> > +                          final boolean ignoreExceptions, final
>>>>> long shutdownTimeout, final Configuration config,
>>>>> > +                          final boolean includeLocation, final
>>>>> BlockingQueueFactory<LogEvent> blockingQueueFactory) {
>>>>> >         super(name, filter, null, ignoreExceptions);
>>>>> >         this.queue = BlockingQueueFactoryUtil.<LogE
>>>>> vent>getBlockingQueueFactory().create(queueSize);
>>>>> >         this.queueSize = queueSize;
>>>>> > @@ -217,7 +219,9 @@ public final class AsyncAppender extends
>>>>> AbstractAppender {
>>>>> >     }
>>>>> >
>>>>> >     /**
>>>>> > -     * Create an AsyncAppender.
>>>>> > +     * Create an AsyncAppender. This method is retained for
>>>>> backwards compatibility. New code should use the
>>>>> > +     * {@link Builder} instead. This factory will use {@link
>>>>> ArrayBlockingQueueFactory} by default as was the behavior
>>>>> > +     * pre-2.7.
>>>>> >      *
>>>>> >      * @param appenderRefs     The Appenders to reference.
>>>>> >      * @param errorRef         An optional Appender to write to if
>>>>> the queue is full or other errors occur.
>>>>> > @@ -247,7 +251,7 @@ public final class AsyncAppender extends
>>>>> AbstractAppender {
>>>>> >         }
>>>>> >
>>>>> >         return new AsyncAppender(name, filter, appenderRefs,
>>>>> errorRef, size, blocking, ignoreExceptions,
>>>>> > -            shutdownTimeout, config, includeLocation);
>>>>> > +            shutdownTimeout, config, includeLocation, new
>>>>> ArrayBlockingQueueFactory<LogEvent>());
>>>>> >     }
>>>>> >
>>>>> >     @PluginBuilderFactory
>>>>> > @@ -290,6 +294,9 @@ public final class AsyncAppender extends
>>>>> AbstractAppender {
>>>>> >         @PluginBuilderAttribute
>>>>> >         private boolean ignoreExceptions = true;
>>>>> >
>>>>> > +        @PluginElement(BlockingQueueFactory.ELEMENT_TYPE)
>>>>> > +        private BlockingQueueFactory<LogEvent> blockingQueueFactory
>>>>> = new ArrayBlockingQueueFactory<>();
>>>>> > +
>>>>> >         public Builder setAppenderRefs(AppenderRef[] appenderRefs) {
>>>>> >             this.appenderRefs = appenderRefs;
>>>>> >             return this;
>>>>> > @@ -340,10 +347,15 @@ public final class AsyncAppender extends
>>>>> AbstractAppender {
>>>>> >             return this;
>>>>> >         }
>>>>> >
>>>>> > +        public Builder setBlockingQueueFactory(final
>>>>> BlockingQueueFactory<LogEvent> blockingQueueFactory) {
>>>>> > +            this.blockingQueueFactory = blockingQueueFactory;
>>>>> > +            return this;
>>>>> > +        }
>>>>> > +
>>>>> >         @Override
>>>>> >         public AsyncAppender build() {
>>>>> >             return new AsyncAppender(name, filter, appenderRefs,
>>>>> errorRef, bufferSize, blocking, ignoreExceptions,
>>>>> > -                shutdownTimeout, configuration, includeLocation);
>>>>> > +                shutdownTimeout, configuration, includeLocation,
>>>>> blockingQueueFactory);
>>>>> >         }
>>>>> >     }
>>>>> >
>>>>> >
>>>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>>>> 5ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/co
>>>>> re/async/ArrayBlockingQueueFactory.java
>>>>> > ------------------------------------------------------------
>>>>> ----------
>>>>> > diff --git a/log4j-core/src/main/java/org
>>>>> /apache/logging/log4j/core/async/ArrayBlockingQueueFactory.java
>>>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>> nc/ArrayBlockingQueueFactory.java
>>>>> > index e9c99b8..dcad78a 100644
>>>>> > --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>> nc/ArrayBlockingQueueFactory.java
>>>>> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>> nc/ArrayBlockingQueueFactory.java
>>>>> > @@ -3,14 +3,24 @@ package org.apache.logging.log4j.core.async;
>>>>> > import java.util.concurrent.ArrayBlockingQueue;
>>>>> > import java.util.concurrent.BlockingQueue;
>>>>> >
>>>>> > +import org.apache.logging.log4j.core.config.Node;
>>>>> > +import org.apache.logging.log4j.core.config.plugins.Plugin;
>>>>> > +import org.apache.logging.log4j.core.config.plugins.PluginFactory;
>>>>> > +
>>>>> > /**
>>>>> >  * Factory for creating instances of {@link ArrayBlockingQueue}.
>>>>> >  *
>>>>> >  * @since 2.7
>>>>> >  */
>>>>> > +@Plugin(name = "ArrayBlockingQueue", category = Node.CATEGORY,
>>>>> elementType = BlockingQueueFactory.ELEMENT_TYPE)
>>>>> > public class ArrayBlockingQueueFactory<E> implements
>>>>> BlockingQueueFactory<E> {
>>>>> >     @Override
>>>>> >     public BlockingQueue<E> create(int capacity) {
>>>>> >         return new ArrayBlockingQueue<>(capacity);
>>>>> >     }
>>>>> > +
>>>>> > +    @PluginFactory
>>>>> > +    public static <E> ArrayBlockingQueueFactory<E> createFactory() {
>>>>> > +        return new ArrayBlockingQueueFactory<>();
>>>>> > +    }
>>>>> > }
>>>>> >
>>>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>>>> 5ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/co
>>>>> re/async/BlockingQueueFactory.java
>>>>> > ------------------------------------------------------------
>>>>> ----------
>>>>> > diff --git a/log4j-core/src/main/java/org
>>>>> /apache/logging/log4j/core/async/BlockingQueueFactory.java
>>>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>> nc/BlockingQueueFactory.java
>>>>> > index ccd1625..5763d1e 100644
>>>>> > --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>> nc/BlockingQueueFactory.java
>>>>> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>> nc/BlockingQueueFactory.java
>>>>> > @@ -9,7 +9,18 @@ import java.util.concurrent.BlockingQueue;
>>>>> >  */
>>>>> > public interface BlockingQueueFactory<E> {
>>>>> >
>>>>> > -    String PROPERTY = "log4j.BlockingQueueFactory";
>>>>> > +    /**
>>>>> > +     * The {@link org.apache.logging.log4j.core.
>>>>> config.plugins.Plugin#elementType() element type} to use for plugins
>>>>> > +     * implementing this interface.
>>>>> > +     */
>>>>> > +    String ELEMENT_TYPE = "BlockingQueueFactory";
>>>>> >
>>>>> > +    /**
>>>>> > +     * Creates a new BlockingQueue with the specified maximum
>>>>> capacity. Note that not all implementations of
>>>>> > +     * BlockingQueue support a bounded capacity in which case the
>>>>> value is ignored.
>>>>> > +     *
>>>>> > +     * @param capacity maximum size of the queue if supported
>>>>> > +     * @return a new BlockingQueue
>>>>> > +     */
>>>>> >     BlockingQueue<E> create(int capacity);
>>>>> > }
>>>>> >
>>>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>>>> 5ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/co
>>>>> re/async/DisruptorBlockingQueueFactory.java
>>>>> > ------------------------------------------------------------
>>>>> ----------
>>>>> > diff --git a/log4j-core/src/main/java/org
>>>>> /apache/logging/log4j/core/async/DisruptorBlockingQueueFactory.java
>>>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>> nc/DisruptorBlockingQueueFactory.java
>>>>> > index 8fb3707..add375d 100644
>>>>> > --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>> nc/DisruptorBlockingQueueFactory.java
>>>>> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>> nc/DisruptorBlockingQueueFactory.java
>>>>> > @@ -3,15 +3,24 @@ package org.apache.logging.log4j.core.async;
>>>>> > import java.util.concurrent.BlockingQueue;
>>>>> >
>>>>> > import com.conversantmedia.util.concurrent.DisruptorBlockingQueue;
>>>>> > +import org.apache.logging.log4j.core.config.Node;
>>>>> > +import org.apache.logging.log4j.core.config.plugins.Plugin;
>>>>> > +import org.apache.logging.log4j.core.config.plugins.PluginFactory;
>>>>> >
>>>>> > /**
>>>>> >  * Factory for creating instances of {@link DisruptorBlockingQueue}.
>>>>> >  *
>>>>> >  * @since 2.7
>>>>> >  */
>>>>> > +@Plugin(name = "DisruptorBlockingQueue", category = Node.CATEGORY,
>>>>> elementType = BlockingQueueFactory.ELEMENT_TYPE)
>>>>> > public class DisruptorBlockingQueueFactory<E> implements
>>>>> BlockingQueueFactory<E> {
>>>>> >     @Override
>>>>> >     public BlockingQueue<E> create(int capacity) {
>>>>> > -        return new DisruptorBlockingQueue<E>(capacity);
>>>>> > +        return new DisruptorBlockingQueue<>(capacity);
>>>>> > +    }
>>>>> > +
>>>>> > +    @PluginFactory
>>>>> > +    public static <E> DisruptorBlockingQueueFactory<E>
>>>>> createFactory() {
>>>>> > +        return new DisruptorBlockingQueueFactory<>();
>>>>> >     }
>>>>> > }
>>>>> >
>>>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>>>> 5ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/co
>>>>> re/async/LinkedTransferQueueFactory.java
>>>>> > ------------------------------------------------------------
>>>>> ----------
>>>>> > diff --git a/log4j-core/src/main/java/org
>>>>> /apache/logging/log4j/core/async/LinkedTransferQueueFactory.java
>>>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>> nc/LinkedTransferQueueFactory.java
>>>>> > index 862fab3..6ab24e7 100644
>>>>> > --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>> nc/LinkedTransferQueueFactory.java
>>>>> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>> nc/LinkedTransferQueueFactory.java
>>>>> > @@ -20,14 +20,24 @@ package org.apache.logging.log4j.core.async;
>>>>> > import java.util.concurrent.BlockingQueue;
>>>>> > import java.util.concurrent.LinkedTransferQueue;
>>>>> >
>>>>> > +import org.apache.logging.log4j.core.config.Node;
>>>>> > +import org.apache.logging.log4j.core.config.plugins.Plugin;
>>>>> > +import org.apache.logging.log4j.core.config.plugins.PluginFactory;
>>>>> > +
>>>>> > /**
>>>>> >  * Factory for creating instances of {@link LinkedTransferQueue}.
>>>>> >  *
>>>>> >  * @since 2.7
>>>>> >  */
>>>>> > +@Plugin(name = "LinkedTransferQueue", category = Node.CATEGORY,
>>>>> elementType = BlockingQueueFactory.ELEMENT_TYPE)
>>>>> > public class LinkedTransferQueueFactory<E> implements
>>>>> BlockingQueueFactory<E> {
>>>>> >     @Override
>>>>> >     public BlockingQueue<E> create(int capacity) {
>>>>> >         return new LinkedTransferQueue<>();
>>>>> >     }
>>>>> > +
>>>>> > +    @PluginFactory
>>>>> > +    public static <E> LinkedTransferQueueFactory<E> createFactory()
>>>>> {
>>>>> > +        return new LinkedTransferQueueFactory<>();
>>>>> > +    }
>>>>> > }
>>>>> >
>>>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>>>> 5ec9bce/log4j-core/src/test/java/org/apache/logging/log4j/co
>>>>> re/appender/AsyncAppenderTest.java
>>>>> > ------------------------------------------------------------
>>>>> ----------
>>>>> > diff --git a/log4j-core/src/test/java/org
>>>>> /apache/logging/log4j/core/appender/AsyncAppenderTest.java
>>>>> b/log4j-core/src/test/java/org/apache/logging/log4j/core/app
>>>>> ender/AsyncAppenderTest.java
>>>>> > index 3066f38..076fdd0 100644
>>>>> > --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/app
>>>>> ender/AsyncAppenderTest.java
>>>>> > +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/app
>>>>> ender/AsyncAppenderTest.java
>>>>> > @@ -41,19 +41,21 @@ import static org.junit.Assert.*;
>>>>> >  */
>>>>> > @RunWith(Parameterized.class)
>>>>> > public class AsyncAppenderTest {
>>>>> > -    private static final String CONFIG = "log4j-asynch.xml";
>>>>> >
>>>>> >     @Parameterized.Parameters
>>>>> >     public static Object[] data() {
>>>>> > -        return new Class<?>[]{
>>>>> > -            ArrayBlockingQueueFactory.class,
>>>>> > -            DisruptorBlockingQueueFactory.class,
>>>>> > -            LinkedTransferQueueFactory.class
>>>>> > +        return new String[]{
>>>>> > +            // default async config uses array blocking queue
>>>>> > +            "log4j-asynch.xml",
>>>>> > +            // override default blocking queue implementations
>>>>> > +            "BlockingQueueFactory-ArrayBlockingQueue.xml",
>>>>> > +            "BlockingQueueFactory-DisruptorBlockingQueue.xml",
>>>>> > +            "BlockingQueueFactory-LinkedTransferQueue.xml"
>>>>> >         };
>>>>> >     }
>>>>> >
>>>>> > -    public AsyncAppenderTest(final Class<? extends
>>>>> BlockingQueueFactory> factory) {
>>>>> > -        context = new LoggerContextRule(CONFIG).with
>>>>> SystemProperty(BlockingQueueFactory.PROPERTY, factory.getName());
>>>>> > +    public AsyncAppenderTest(final String configFileName) {
>>>>> > +        context = new LoggerContextRule(configFileName);
>>>>> >     }
>>>>> >
>>>>> >     @Rule
>>>>> >
>>>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>>>> 5ec9bce/log4j-core/src/test/resources/BlockingQueueFactory-A
>>>>> rrayBlockingQueue.xml
>>>>> > ------------------------------------------------------------
>>>>> ----------
>>>>> > diff --git a/log4j-core/src/test/resource
>>>>> s/BlockingQueueFactory-ArrayBlockingQueue.xml
>>>>> b/log4j-core/src/test/resources/BlockingQueueFactory-ArrayBl
>>>>> ockingQueue.xml
>>>>> > new file mode 100644
>>>>> > index 0000000..e8bbfa6
>>>>> > --- /dev/null
>>>>> > +++ b/log4j-core/src/test/resources/BlockingQueueFactory-ArrayBl
>>>>> ockingQueue.xml
>>>>> > @@ -0,0 +1,40 @@
>>>>> > +<?xml version="1.0" encoding="UTF-8"?>
>>>>> > +<!--
>>>>> > + Licensed to the Apache Software Foundation (ASF) under one or more
>>>>> > + contributor license agreements.  See the NOTICE file distributed
>>>>> with
>>>>> > + this work for additional information regarding copyright ownership.
>>>>> > + The ASF licenses this file to You under the Apache License,
>>>>> Version 2.0
>>>>> > + (the "License"); you may not use this file except in compliance
>>>>> with
>>>>> > + the License.  You may obtain a copy of the License at
>>>>> > +
>>>>> > +      http://www.apache.org/licenses/LICENSE-2.0
>>>>> > +
>>>>> > + Unless required by applicable law or agreed to in writing, software
>>>>> > + distributed under the License is distributed on an "AS IS" BASIS,
>>>>> > + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>>>>> implied.
>>>>> > + See the License for the specific language governing permissions and
>>>>> > + limitations under the License.
>>>>> > +
>>>>> > +-->
>>>>> > +<Configuration status="OFF" name="ArrayBlockingQueueFactory">
>>>>> > +
>>>>> > +  <Appenders>
>>>>> > +    <Console name="STDOUT">
>>>>> > +      <PatternLayout pattern="%m%n"/>
>>>>> > +    </Console>
>>>>> > +    <List name="List">
>>>>> > +      <PatternLayout pattern="%C %M %m"/>
>>>>> > +    </List>
>>>>> > +    <Async name="Async" includeLocation="true" error-ref="STDOUT">
>>>>> > +      <AppenderRef ref="List"/>
>>>>> > +      <ArrayBlockingQueue/>
>>>>> > +    </Async>
>>>>> > +  </Appenders>
>>>>> > +
>>>>> > +  <Loggers>
>>>>> > +    <Root level="debug">
>>>>> > +      <AppenderRef ref="Async"/>
>>>>> > +    </Root>
>>>>> > +  </Loggers>
>>>>> > +
>>>>> > +</Configuration>
>>>>> > \ No newline at end of file
>>>>> >
>>>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>>>> 5ec9bce/log4j-core/src/test/resources/BlockingQueueFactory-D
>>>>> isruptorBlockingQueue.xml
>>>>> > ------------------------------------------------------------
>>>>> ----------
>>>>> > diff --git a/log4j-core/src/test/resource
>>>>> s/BlockingQueueFactory-DisruptorBlockingQueue.xml
>>>>> b/log4j-core/src/test/resources/BlockingQueueFactory-Disrupt
>>>>> orBlockingQueue.xml
>>>>> > new file mode 100644
>>>>> > index 0000000..268cca7
>>>>> > --- /dev/null
>>>>> > +++ b/log4j-core/src/test/resources/BlockingQueueFactory-Disrupt
>>>>> orBlockingQueue.xml
>>>>> > @@ -0,0 +1,40 @@
>>>>> > +<?xml version="1.0" encoding="UTF-8"?>
>>>>> > +<!--
>>>>> > + Licensed to the Apache Software Foundation (ASF) under one or more
>>>>> > + contributor license agreements.  See the NOTICE file distributed
>>>>> with
>>>>> > + this work for additional information regarding copyright ownership.
>>>>> > + The ASF licenses this file to You under the Apache License,
>>>>> Version 2.0
>>>>> > + (the "License"); you may not use this file except in compliance
>>>>> with
>>>>> > + the License.  You may obtain a copy of the License at
>>>>> > +
>>>>> > +      http://www.apache.org/licenses/LICENSE-2.0
>>>>> > +
>>>>> > + Unless required by applicable law or agreed to in writing, software
>>>>> > + distributed under the License is distributed on an "AS IS" BASIS,
>>>>> > + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>>>>> implied.
>>>>> > + See the License for the specific language governing permissions and
>>>>> > + limitations under the License.
>>>>> > +
>>>>> > +-->
>>>>> > +<Configuration status="OFF" name="DisruptorBlockingQueueFactory">
>>>>> > +
>>>>> > +  <Appenders>
>>>>> > +    <Console name="STDOUT">
>>>>> > +      <PatternLayout pattern="%m%n"/>
>>>>> > +    </Console>
>>>>> > +    <List name="List">
>>>>> > +      <PatternLayout pattern="%C %M %m"/>
>>>>> > +    </List>
>>>>> > +    <Async name="Async" includeLocation="true" error-ref="STDOUT">
>>>>> > +      <AppenderRef ref="List"/>
>>>>> > +      <DisruptorBlockingQueue/>
>>>>> > +    </Async>
>>>>> > +  </Appenders>
>>>>> > +
>>>>> > +  <Loggers>
>>>>> > +    <Root level="debug">
>>>>> > +      <AppenderRef ref="Async"/>
>>>>> > +    </Root>
>>>>> > +  </Loggers>
>>>>> > +
>>>>> > +</Configuration>
>>>>> > \ No newline at end of file
>>>>> >
>>>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>>>> 5ec9bce/log4j-core/src/test/resources/BlockingQueueFactory-L
>>>>> inkedTransferQueue.xml
>>>>> > ------------------------------------------------------------
>>>>> ----------
>>>>> > diff --git a/log4j-core/src/test/resource
>>>>> s/BlockingQueueFactory-LinkedTransferQueue.xml
>>>>> b/log4j-core/src/test/resources/BlockingQueueFactory-LinkedT
>>>>> ransferQueue.xml
>>>>> > new file mode 100644
>>>>> > index 0000000..13063d3
>>>>> > --- /dev/null
>>>>> > +++ b/log4j-core/src/test/resources/BlockingQueueFactory-LinkedT
>>>>> ransferQueue.xml
>>>>> > @@ -0,0 +1,40 @@
>>>>> > +<?xml version="1.0" encoding="UTF-8"?>
>>>>> > +<!--
>>>>> > + Licensed to the Apache Software Foundation (ASF) under one or more
>>>>> > + contributor license agreements.  See the NOTICE file distributed
>>>>> with
>>>>> > + this work for additional information regarding copyright ownership.
>>>>> > + The ASF licenses this file to You under the Apache License,
>>>>> Version 2.0
>>>>> > + (the "License"); you may not use this file except in compliance
>>>>> with
>>>>> > + the License.  You may obtain a copy of the License at
>>>>> > +
>>>>> > +      http://www.apache.org/licenses/LICENSE-2.0
>>>>> > +
>>>>> > + Unless required by applicable law or agreed to in writing, software
>>>>> > + distributed under the License is distributed on an "AS IS" BASIS,
>>>>> > + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>>>>> implied.
>>>>> > + See the License for the specific language governing permissions and
>>>>> > + limitations under the License.
>>>>> > +
>>>>> > +-->
>>>>> > +<Configuration status="OFF" name="LinkedTransferQueueFactory">
>>>>> > +
>>>>> > +  <Appenders>
>>>>> > +    <Console name="STDOUT">
>>>>> > +      <PatternLayout pattern="%m%n"/>
>>>>> > +    </Console>
>>>>> > +    <List name="List">
>>>>> > +      <PatternLayout pattern="%C %M %m"/>
>>>>> > +    </List>
>>>>> > +    <Async name="Async" includeLocation="true" error-ref="STDOUT">
>>>>> > +      <AppenderRef ref="List"/>
>>>>> > +      <LinkedTransferQueue/>
>>>>> > +    </Async>
>>>>> > +  </Appenders>
>>>>> > +
>>>>> > +  <Loggers>
>>>>> > +    <Root level="debug">
>>>>> > +      <AppenderRef ref="Async"/>
>>>>> > +    </Root>
>>>>> > +  </Loggers>
>>>>> > +
>>>>> > +</Configuration>
>>>>> > \ No newline at end of file
>>>>> >
>>>>> >
>>>>>
>>>>>
>>>>>
>>>>> ---------------------------------------------------------------------
>>>>> To unsubscribe, e-mail: log4j-dev-unsubscribe@logging.apache.org
>>>>> For additional commands, e-mail: log4j-dev-help@logging.apache.org
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>> 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
>>>>
>>>>
>>>>
>>>
>>>
>>> --
>>> 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
>>>
>>>
>>>
>>
>>
>> --
>> Matt Sicker <bo...@gmail.com>
>>
>
>
>
> --
> Matt Sicker <bo...@gmail.com>
>



-- 
[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: [13/36] logging-log4j2 git commit: Convert BlockingQueueFactory into a plugin element

Posted by Matt Sicker <bo...@gmail.com>.
John is working on making a release that uses Java 1.7.

On 6 September 2016 at 14:01, Ralph Goers <ra...@dslextreme.com>
wrote:

> I only run the release build using the compiler for the target release.
> All the target option really does is set the release version to the correct
> value and verify you aren’t using language constructs from the newer java
> version. Using Java 8 with a target of Java 7 runs the risk that you still
> might be dependent on Java 8 library methods and not know about it.
>
> So whatever solution you come up with needs to work when running the build
> with Java 7.
>
> Ralph
>
>
>
>
> On Sep 6, 2016, at 9:23 AM, Matt Sicker <bo...@gmail.com> wrote:
>
> By that I mean they set their compiler version to 1.6 for src/main/ and
> 1.8 for src/test/ which shouldn't affect us as we're not using their test
> artifact.
>
> On 6 September 2016 at 11:22, Matt Sicker <bo...@gmail.com> wrote:
>
>> JCTools requires 1.6 for the build and 1.8 for the test. It appears we
>> could do the same if the only thing failing the build is a unit test, but
>> if the whole build is failing on Java 7, then I can back out those changes
>> into a separate branch for future inclusion.
>>
>> On 6 September 2016 at 11:18, Remko Popma <re...@gmail.com> wrote:
>>
>>> Does JCTools require Java 8? One option is for this release to leave out
>>> the Conversant library and only include JCTools and the TransferQueue.
>>>
>>> On Wed, Sep 7, 2016 at 1:06 AM, Matt Sicker <bo...@gmail.com> wrote:
>>>
>>>> I can't believe I didn't notice it, but the Conversant library does
>>>> require Java 8. It's an optional dependency, so what to do? We can build on
>>>> Java 8 with a target for Java 7 and use the animal-sniffer Maven plugin to
>>>> make sure we don't accidentally use anything from Java 8.
>>>>
>>>> On 5 September 2016 at 22:45, Matt Sicker <bo...@gmail.com> wrote:
>>>>
>>>>> It looks like I may have merged prematurely then. I think I've been
>>>>> running builds using Java 8 as well and didn't notice this. Jenkins isn't
>>>>> even loading for me, so I can't see what the problem is on there. I'll take
>>>>> a look at this tomorrow, and if I can't fix the dependency issue, I'll back
>>>>> out part of this feature for now.
>>>>>
>>>>> On 5 September 2016 at 17:03, Ralph Goers <ra...@dslextreme.com>
>>>>> wrote:
>>>>>
>>>>>> Jenkins and the release builds use Java 7, so you should certainly
>>>>>> use Java 7 from time to time.
>>>>>>
>>>>>> Ralph
>>>>>>
>>>>>> On Sep 5, 2016, at 2:33 PM, Gary Gregory <ga...@gmail.com>
>>>>>> wrote:
>>>>>>
>>>>>> Ah, no, Java 8:
>>>>>>
>>>>>> Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5;
>>>>>> 2015-11-10T08:41:47-08:00)
>>>>>> Maven home: E:\Java\apache-maven-3.3.9
>>>>>> Java version: 1.8.0_101, vendor: Oracle Corporation
>>>>>> Java home: C:\Program Files\Java\jdk1.8.0_101\jre
>>>>>> Default locale: en_US, platform encoding: Cp1252
>>>>>> OS name: "windows 7", version: "6.1", arch: "amd64", family: "dos"
>>>>>>
>>>>>> Gary
>>>>>>
>>>>>> On Mon, Sep 5, 2016 at 5:32 PM, Ralph Goers <
>>>>>> ralph.goers@dslextreme.com> wrote:
>>>>>>
>>>>>>> And you are building with Java 7?
>>>>>>>
>>>>>>> Ralph
>>>>>>>
>>>>>>> On Sep 5, 2016, at 2:18 PM, Gary Gregory <ga...@gmail.com>
>>>>>>> wrote:
>>>>>>>
>>>>>>> Locally, I get:
>>>>>>>
>>>>>>> Failed tests:
>>>>>>>   RoutingAppenderWithPurgingTest.routingTest:91 Incorrect number of
>>>>>>> appenders with IdlePurgePolicy. expected:<3> but was:<1>
>>>>>>>
>>>>>>> Gary
>>>>>>>
>>>>>>> On Mon, Sep 5, 2016 at 12:54 PM, Ralph Goers <
>>>>>>> ralph.goers@dslextreme.com> wrote:
>>>>>>>
>>>>>>>> For the record, I am voting -1 on this commit.  It breaks the build
>>>>>>>> because the DisruptorBlockingQueueFactory has a dependency that requires
>>>>>>>> Java 8. The 2.7 release is blocked until this is corrected.
>>>>>>>>
>>>>>>>> Ralph
>>>>>>>>
>>>>>>>> > On Sep 4, 2016, at 11:38 AM, mattsicker@apache.org wrote:
>>>>>>>> >
>>>>>>>> > Convert BlockingQueueFactory into a plugin element
>>>>>>>> >
>>>>>>>> > Related to LOG4J2-1430.
>>>>>>>> >
>>>>>>>> >
>>>>>>>> > Project: http://git-wip-us.apache.org/r
>>>>>>>> epos/asf/logging-log4j2/repo
>>>>>>>> > Commit: http://git-wip-us.apache.org/r
>>>>>>>> epos/asf/logging-log4j2/commit/65ec9bce
>>>>>>>> > Tree: http://git-wip-us.apache.org/r
>>>>>>>> epos/asf/logging-log4j2/tree/65ec9bce
>>>>>>>> > Diff: http://git-wip-us.apache.org/r
>>>>>>>> epos/asf/logging-log4j2/diff/65ec9bce
>>>>>>>> >
>>>>>>>> > Branch: refs/heads/master
>>>>>>>> > Commit: 65ec9bcef74dc30ecab9c2091c6e0638d53490d8
>>>>>>>> > Parents: 0848d7a
>>>>>>>> > Author: Matt Sicker <bo...@gmail.com>
>>>>>>>> > Authored: Fri Jun 17 18:51:08 2016 -0500
>>>>>>>> > Committer: Matt Sicker <bo...@gmail.com>
>>>>>>>> > Committed: Fri Jun 17 18:51:08 2016 -0500
>>>>>>>> >
>>>>>>>> > ------------------------------------------------------------
>>>>>>>> ----------
>>>>>>>> > .../log4j/core/appender/AsyncAppender.java      | 24 +++++++++---
>>>>>>>> > .../core/async/ArrayBlockingQueueFactory.java   | 10 +++++
>>>>>>>> > .../log4j/core/async/BlockingQueueFactory.java  | 13 ++++++-
>>>>>>>> > .../async/DisruptorBlockingQueueFactory.java    | 11 +++++-
>>>>>>>> > .../core/async/LinkedTransferQueueFactory.java  | 10 +++++
>>>>>>>> > .../log4j/core/appender/AsyncAppenderTest.java  | 16 ++++----
>>>>>>>> > .../BlockingQueueFactory-ArrayBlockingQueue.xml | 40
>>>>>>>> ++++++++++++++++++++
>>>>>>>> > ...ckingQueueFactory-DisruptorBlockingQueue.xml | 40
>>>>>>>> ++++++++++++++++++++
>>>>>>>> > ...BlockingQueueFactory-LinkedTransferQueue.xml | 40
>>>>>>>> ++++++++++++++++++++
>>>>>>>> > 9 files changed, 189 insertions(+), 15 deletions(-)
>>>>>>>> > ------------------------------------------------------------
>>>>>>>> ----------
>>>>>>>> >
>>>>>>>> >
>>>>>>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>>>>>>> 5ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/co
>>>>>>>> re/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/app
>>>>>>>> ender/AsyncAppender.java
>>>>>>>> > index 3c9c37c..dee5e50 100644
>>>>>>>> > --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/app
>>>>>>>> ender/AsyncAppender.java
>>>>>>>> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/app
>>>>>>>> ender/AsyncAppender.java
>>>>>>>> > @@ -26,8 +26,11 @@ 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;
>>>>>>>> > +import org.apache.logging.log4j.core.
>>>>>>>> async.ArrayBlockingQueueFactory;
>>>>>>>> > import org.apache.logging.log4j.core.async.AsyncQueueFullPolicy;
>>>>>>>> > import org.apache.logging.log4j.core.
>>>>>>>> async.AsyncQueueFullPolicyFactory;
>>>>>>>> > +import org.apache.logging.log4j.core.async.BlockingQueueFactory;
>>>>>>>> > +import org.apache.logging.log4j.core.
>>>>>>>> async.BlockingQueueFactoryUtil;
>>>>>>>> > import org.apache.logging.log4j.core.
>>>>>>>> async.DiscardingAsyncQueueFullPolicy;
>>>>>>>> > import org.apache.logging.log4j.core.async.EventRoute;
>>>>>>>> > import org.apache.logging.log4j.core.config.AppenderControl;
>>>>>>>> > @@ -42,7 +45,6 @@ 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.validation.constraints.Required;
>>>>>>>> > import org.apache.logging.log4j.core.impl.Log4jLogEvent;
>>>>>>>> > -import org.apache.logging.log4j.core.
>>>>>>>> async.BlockingQueueFactoryUtil;
>>>>>>>> > import org.apache.logging.log4j.core.util.Constants;
>>>>>>>> >
>>>>>>>> > /**
>>>>>>>> > @@ -73,8 +75,8 @@ public final class AsyncAppender extends
>>>>>>>> AbstractAppender {
>>>>>>>> >
>>>>>>>> >     private AsyncAppender(final String name, final Filter filter,
>>>>>>>> final AppenderRef[] appenderRefs,
>>>>>>>> >                           final String errorRef, final int
>>>>>>>> queueSize, final boolean blocking,
>>>>>>>> > -                          final boolean ignoreExceptions,
>>>>>>>> > -                          final long shutdownTimeout, final
>>>>>>>> Configuration config, final boolean includeLocation) {
>>>>>>>> > +                          final boolean ignoreExceptions, final
>>>>>>>> long shutdownTimeout, final Configuration config,
>>>>>>>> > +                          final boolean includeLocation, final
>>>>>>>> BlockingQueueFactory<LogEvent> blockingQueueFactory) {
>>>>>>>> >         super(name, filter, null, ignoreExceptions);
>>>>>>>> >         this.queue = BlockingQueueFactoryUtil.<LogE
>>>>>>>> vent>getBlockingQueueFactory().create(queueSize);
>>>>>>>> >         this.queueSize = queueSize;
>>>>>>>> > @@ -217,7 +219,9 @@ public final class AsyncAppender extends
>>>>>>>> AbstractAppender {
>>>>>>>> >     }
>>>>>>>> >
>>>>>>>> >     /**
>>>>>>>> > -     * Create an AsyncAppender.
>>>>>>>> > +     * Create an AsyncAppender. This method is retained for
>>>>>>>> backwards compatibility. New code should use the
>>>>>>>> > +     * {@link Builder} instead. This factory will use {@link
>>>>>>>> ArrayBlockingQueueFactory} by default as was the behavior
>>>>>>>> > +     * pre-2.7.
>>>>>>>> >      *
>>>>>>>> >      * @param appenderRefs     The Appenders to reference.
>>>>>>>> >      * @param errorRef         An optional Appender to write to
>>>>>>>> if the queue is full or other errors occur.
>>>>>>>> > @@ -247,7 +251,7 @@ public final class AsyncAppender extends
>>>>>>>> AbstractAppender {
>>>>>>>> >         }
>>>>>>>> >
>>>>>>>> >         return new AsyncAppender(name, filter, appenderRefs,
>>>>>>>> errorRef, size, blocking, ignoreExceptions,
>>>>>>>> > -            shutdownTimeout, config, includeLocation);
>>>>>>>> > +            shutdownTimeout, config, includeLocation, new
>>>>>>>> ArrayBlockingQueueFactory<LogEvent>());
>>>>>>>> >     }
>>>>>>>> >
>>>>>>>> >     @PluginBuilderFactory
>>>>>>>> > @@ -290,6 +294,9 @@ public final class AsyncAppender extends
>>>>>>>> AbstractAppender {
>>>>>>>> >         @PluginBuilderAttribute
>>>>>>>> >         private boolean ignoreExceptions = true;
>>>>>>>> >
>>>>>>>> > +        @PluginElement(BlockingQueueFactory.ELEMENT_TYPE)
>>>>>>>> > +        private BlockingQueueFactory<LogEvent>
>>>>>>>> blockingQueueFactory = new ArrayBlockingQueueFactory<>();
>>>>>>>> > +
>>>>>>>> >         public Builder setAppenderRefs(AppenderRef[]
>>>>>>>> appenderRefs) {
>>>>>>>> >             this.appenderRefs = appenderRefs;
>>>>>>>> >             return this;
>>>>>>>> > @@ -340,10 +347,15 @@ public final class AsyncAppender extends
>>>>>>>> AbstractAppender {
>>>>>>>> >             return this;
>>>>>>>> >         }
>>>>>>>> >
>>>>>>>> > +        public Builder setBlockingQueueFactory(final
>>>>>>>> BlockingQueueFactory<LogEvent> blockingQueueFactory) {
>>>>>>>> > +            this.blockingQueueFactory = blockingQueueFactory;
>>>>>>>> > +            return this;
>>>>>>>> > +        }
>>>>>>>> > +
>>>>>>>> >         @Override
>>>>>>>> >         public AsyncAppender build() {
>>>>>>>> >             return new AsyncAppender(name, filter, appenderRefs,
>>>>>>>> errorRef, bufferSize, blocking, ignoreExceptions,
>>>>>>>> > -                shutdownTimeout, configuration, includeLocation);
>>>>>>>> > +                shutdownTimeout, configuration, includeLocation,
>>>>>>>> blockingQueueFactory);
>>>>>>>> >         }
>>>>>>>> >     }
>>>>>>>> >
>>>>>>>> >
>>>>>>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>>>>>>> 5ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/co
>>>>>>>> re/async/ArrayBlockingQueueFactory.java
>>>>>>>> > ------------------------------------------------------------
>>>>>>>> ----------
>>>>>>>> > diff --git a/log4j-core/src/main/java/org
>>>>>>>> /apache/logging/log4j/core/async/ArrayBlockingQueueFactory.java
>>>>>>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>>>>> nc/ArrayBlockingQueueFactory.java
>>>>>>>> > index e9c99b8..dcad78a 100644
>>>>>>>> > --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>>>>> nc/ArrayBlockingQueueFactory.java
>>>>>>>> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>>>>> nc/ArrayBlockingQueueFactory.java
>>>>>>>> > @@ -3,14 +3,24 @@ package org.apache.logging.log4j.core.async;
>>>>>>>> > import java.util.concurrent.ArrayBlockingQueue;
>>>>>>>> > import java.util.concurrent.BlockingQueue;
>>>>>>>> >
>>>>>>>> > +import org.apache.logging.log4j.core.config.Node;
>>>>>>>> > +import org.apache.logging.log4j.core.config.plugins.Plugin;
>>>>>>>> > +import org.apache.logging.log4j.core.
>>>>>>>> config.plugins.PluginFactory;
>>>>>>>> > +
>>>>>>>> > /**
>>>>>>>> >  * Factory for creating instances of {@link ArrayBlockingQueue}.
>>>>>>>> >  *
>>>>>>>> >  * @since 2.7
>>>>>>>> >  */
>>>>>>>> > +@Plugin(name = "ArrayBlockingQueue", category = Node.CATEGORY,
>>>>>>>> elementType = BlockingQueueFactory.ELEMENT_TYPE)
>>>>>>>> > public class ArrayBlockingQueueFactory<E> implements
>>>>>>>> BlockingQueueFactory<E> {
>>>>>>>> >     @Override
>>>>>>>> >     public BlockingQueue<E> create(int capacity) {
>>>>>>>> >         return new ArrayBlockingQueue<>(capacity);
>>>>>>>> >     }
>>>>>>>> > +
>>>>>>>> > +    @PluginFactory
>>>>>>>> > +    public static <E> ArrayBlockingQueueFactory<E>
>>>>>>>> createFactory() {
>>>>>>>> > +        return new ArrayBlockingQueueFactory<>();
>>>>>>>> > +    }
>>>>>>>> > }
>>>>>>>> >
>>>>>>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>>>>>>> 5ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/co
>>>>>>>> re/async/BlockingQueueFactory.java
>>>>>>>> > ------------------------------------------------------------
>>>>>>>> ----------
>>>>>>>> > diff --git a/log4j-core/src/main/java/org
>>>>>>>> /apache/logging/log4j/core/async/BlockingQueueFactory.java
>>>>>>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>>>>> nc/BlockingQueueFactory.java
>>>>>>>> > index ccd1625..5763d1e 100644
>>>>>>>> > --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>>>>> nc/BlockingQueueFactory.java
>>>>>>>> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>>>>> nc/BlockingQueueFactory.java
>>>>>>>> > @@ -9,7 +9,18 @@ import java.util.concurrent.BlockingQueue;
>>>>>>>> >  */
>>>>>>>> > public interface BlockingQueueFactory<E> {
>>>>>>>> >
>>>>>>>> > -    String PROPERTY = "log4j.BlockingQueueFactory";
>>>>>>>> > +    /**
>>>>>>>> > +     * The {@link org.apache.logging.log4j.core.
>>>>>>>> config.plugins.Plugin#elementType() element type} to use for
>>>>>>>> plugins
>>>>>>>> > +     * implementing this interface.
>>>>>>>> > +     */
>>>>>>>> > +    String ELEMENT_TYPE = "BlockingQueueFactory";
>>>>>>>> >
>>>>>>>> > +    /**
>>>>>>>> > +     * Creates a new BlockingQueue with the specified maximum
>>>>>>>> capacity. Note that not all implementations of
>>>>>>>> > +     * BlockingQueue support a bounded capacity in which case
>>>>>>>> the value is ignored.
>>>>>>>> > +     *
>>>>>>>> > +     * @param capacity maximum size of the queue if supported
>>>>>>>> > +     * @return a new BlockingQueue
>>>>>>>> > +     */
>>>>>>>> >     BlockingQueue<E> create(int capacity);
>>>>>>>> > }
>>>>>>>> >
>>>>>>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>>>>>>> 5ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/co
>>>>>>>> re/async/DisruptorBlockingQueueFactory.java
>>>>>>>> > ------------------------------------------------------------
>>>>>>>> ----------
>>>>>>>> > diff --git a/log4j-core/src/main/java/org
>>>>>>>> /apache/logging/log4j/core/async/DisruptorBlockingQueueFactory.java
>>>>>>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>>>>> nc/DisruptorBlockingQueueFactory.java
>>>>>>>> > index 8fb3707..add375d 100644
>>>>>>>> > --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>>>>> nc/DisruptorBlockingQueueFactory.java
>>>>>>>> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>>>>> nc/DisruptorBlockingQueueFactory.java
>>>>>>>> > @@ -3,15 +3,24 @@ package org.apache.logging.log4j.core.async;
>>>>>>>> > import java.util.concurrent.BlockingQueue;
>>>>>>>> >
>>>>>>>> > import com.conversantmedia.util.concu
>>>>>>>> rrent.DisruptorBlockingQueue;
>>>>>>>> > +import org.apache.logging.log4j.core.config.Node;
>>>>>>>> > +import org.apache.logging.log4j.core.config.plugins.Plugin;
>>>>>>>> > +import org.apache.logging.log4j.core.
>>>>>>>> config.plugins.PluginFactory;
>>>>>>>> >
>>>>>>>> > /**
>>>>>>>> >  * Factory for creating instances of {@link
>>>>>>>> DisruptorBlockingQueue}.
>>>>>>>> >  *
>>>>>>>> >  * @since 2.7
>>>>>>>> >  */
>>>>>>>> > +@Plugin(name = "DisruptorBlockingQueue", category =
>>>>>>>> Node.CATEGORY, elementType = BlockingQueueFactory.ELEMENT_TYPE)
>>>>>>>> > public class DisruptorBlockingQueueFactory<E> implements
>>>>>>>> BlockingQueueFactory<E> {
>>>>>>>> >     @Override
>>>>>>>> >     public BlockingQueue<E> create(int capacity) {
>>>>>>>> > -        return new DisruptorBlockingQueue<E>(capacity);
>>>>>>>> > +        return new DisruptorBlockingQueue<>(capacity);
>>>>>>>> > +    }
>>>>>>>> > +
>>>>>>>> > +    @PluginFactory
>>>>>>>> > +    public static <E> DisruptorBlockingQueueFactory<E>
>>>>>>>> createFactory() {
>>>>>>>> > +        return new DisruptorBlockingQueueFactory<>();
>>>>>>>> >     }
>>>>>>>> > }
>>>>>>>> >
>>>>>>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>>>>>>> 5ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/co
>>>>>>>> re/async/LinkedTransferQueueFactory.java
>>>>>>>> > ------------------------------------------------------------
>>>>>>>> ----------
>>>>>>>> > diff --git a/log4j-core/src/main/java/org
>>>>>>>> /apache/logging/log4j/core/async/LinkedTransferQueueFactory.java
>>>>>>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>>>>> nc/LinkedTransferQueueFactory.java
>>>>>>>> > index 862fab3..6ab24e7 100644
>>>>>>>> > --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>>>>> nc/LinkedTransferQueueFactory.java
>>>>>>>> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>>>>> nc/LinkedTransferQueueFactory.java
>>>>>>>> > @@ -20,14 +20,24 @@ package org.apache.logging.log4j.core.async;
>>>>>>>> > import java.util.concurrent.BlockingQueue;
>>>>>>>> > import java.util.concurrent.LinkedTransferQueue;
>>>>>>>> >
>>>>>>>> > +import org.apache.logging.log4j.core.config.Node;
>>>>>>>> > +import org.apache.logging.log4j.core.config.plugins.Plugin;
>>>>>>>> > +import org.apache.logging.log4j.core.
>>>>>>>> config.plugins.PluginFactory;
>>>>>>>> > +
>>>>>>>> > /**
>>>>>>>> >  * Factory for creating instances of {@link LinkedTransferQueue}.
>>>>>>>> >  *
>>>>>>>> >  * @since 2.7
>>>>>>>> >  */
>>>>>>>> > +@Plugin(name = "LinkedTransferQueue", category = Node.CATEGORY,
>>>>>>>> elementType = BlockingQueueFactory.ELEMENT_TYPE)
>>>>>>>> > public class LinkedTransferQueueFactory<E> implements
>>>>>>>> BlockingQueueFactory<E> {
>>>>>>>> >     @Override
>>>>>>>> >     public BlockingQueue<E> create(int capacity) {
>>>>>>>> >         return new LinkedTransferQueue<>();
>>>>>>>> >     }
>>>>>>>> > +
>>>>>>>> > +    @PluginFactory
>>>>>>>> > +    public static <E> LinkedTransferQueueFactory<E>
>>>>>>>> createFactory() {
>>>>>>>> > +        return new LinkedTransferQueueFactory<>();
>>>>>>>> > +    }
>>>>>>>> > }
>>>>>>>> >
>>>>>>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>>>>>>> 5ec9bce/log4j-core/src/test/java/org/apache/logging/log4j/co
>>>>>>>> re/appender/AsyncAppenderTest.java
>>>>>>>> > ------------------------------------------------------------
>>>>>>>> ----------
>>>>>>>> > diff --git a/log4j-core/src/test/java/org
>>>>>>>> /apache/logging/log4j/core/appender/AsyncAppenderTest.java
>>>>>>>> b/log4j-core/src/test/java/org/apache/logging/log4j/core/app
>>>>>>>> ender/AsyncAppenderTest.java
>>>>>>>> > index 3066f38..076fdd0 100644
>>>>>>>> > --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/app
>>>>>>>> ender/AsyncAppenderTest.java
>>>>>>>> > +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/app
>>>>>>>> ender/AsyncAppenderTest.java
>>>>>>>> > @@ -41,19 +41,21 @@ import static org.junit.Assert.*;
>>>>>>>> >  */
>>>>>>>> > @RunWith(Parameterized.class)
>>>>>>>> > public class AsyncAppenderTest {
>>>>>>>> > -    private static final String CONFIG = "log4j-asynch.xml";
>>>>>>>> >
>>>>>>>> >     @Parameterized.Parameters
>>>>>>>> >     public static Object[] data() {
>>>>>>>> > -        return new Class<?>[]{
>>>>>>>> > -            ArrayBlockingQueueFactory.class,
>>>>>>>> > -            DisruptorBlockingQueueFactory.class,
>>>>>>>> > -            LinkedTransferQueueFactory.class
>>>>>>>> > +        return new String[]{
>>>>>>>> > +            // default async config uses array blocking queue
>>>>>>>> > +            "log4j-asynch.xml",
>>>>>>>> > +            // override default blocking queue implementations
>>>>>>>> > +            "BlockingQueueFactory-ArrayBlockingQueue.xml",
>>>>>>>> > +            "BlockingQueueFactory-DisruptorBlockingQueue.xml",
>>>>>>>> > +            "BlockingQueueFactory-LinkedTransferQueue.xml"
>>>>>>>> >         };
>>>>>>>> >     }
>>>>>>>> >
>>>>>>>> > -    public AsyncAppenderTest(final Class<? extends
>>>>>>>> BlockingQueueFactory> factory) {
>>>>>>>> > -        context = new LoggerContextRule(CONFIG).with
>>>>>>>> SystemProperty(BlockingQueueFactory.PROPERTY, factory.getName());
>>>>>>>> > +    public AsyncAppenderTest(final String configFileName) {
>>>>>>>> > +        context = new LoggerContextRule(configFileName);
>>>>>>>> >     }
>>>>>>>> >
>>>>>>>> >     @Rule
>>>>>>>> >
>>>>>>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>>>>>>> 5ec9bce/log4j-core/src/test/resources/BlockingQueueFactory-A
>>>>>>>> rrayBlockingQueue.xml
>>>>>>>> > ------------------------------------------------------------
>>>>>>>> ----------
>>>>>>>> > diff --git a/log4j-core/src/test/resource
>>>>>>>> s/BlockingQueueFactory-ArrayBlockingQueue.xml
>>>>>>>> b/log4j-core/src/test/resources/BlockingQueueFactory-ArrayBl
>>>>>>>> ockingQueue.xml
>>>>>>>> > new file mode 100644
>>>>>>>> > index 0000000..e8bbfa6
>>>>>>>> > --- /dev/null
>>>>>>>> > +++ b/log4j-core/src/test/resources/BlockingQueueFactory-ArrayBl
>>>>>>>> ockingQueue.xml
>>>>>>>> > @@ -0,0 +1,40 @@
>>>>>>>> > +<?xml version="1.0" encoding="UTF-8"?>
>>>>>>>> > +<!--
>>>>>>>> > + Licensed to the Apache Software Foundation (ASF) under one or
>>>>>>>> more
>>>>>>>> > + contributor license agreements.  See the NOTICE file
>>>>>>>> distributed with
>>>>>>>> > + this work for additional information regarding copyright
>>>>>>>> ownership.
>>>>>>>> > + The ASF licenses this file to You under the Apache License,
>>>>>>>> Version 2.0
>>>>>>>> > + (the "License"); you may not use this file except in compliance
>>>>>>>> with
>>>>>>>> > + the License.  You may obtain a copy of the License at
>>>>>>>> > +
>>>>>>>> > +      http://www.apache.org/licenses/LICENSE-2.0
>>>>>>>> > +
>>>>>>>> > + Unless required by applicable law or agreed to in writing,
>>>>>>>> software
>>>>>>>> > + distributed under the License is distributed on an "AS IS"
>>>>>>>> BASIS,
>>>>>>>> > + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>>>>>>>> implied.
>>>>>>>> > + See the License for the specific language governing permissions
>>>>>>>> and
>>>>>>>> > + limitations under the License.
>>>>>>>> > +
>>>>>>>> > +-->
>>>>>>>> > +<Configuration status="OFF" name="ArrayBlockingQueueFactory">
>>>>>>>> > +
>>>>>>>> > +  <Appenders>
>>>>>>>> > +    <Console name="STDOUT">
>>>>>>>> > +      <PatternLayout pattern="%m%n"/>
>>>>>>>> > +    </Console>
>>>>>>>> > +    <List name="List">
>>>>>>>> > +      <PatternLayout pattern="%C %M %m"/>
>>>>>>>> > +    </List>
>>>>>>>> > +    <Async name="Async" includeLocation="true"
>>>>>>>> error-ref="STDOUT">
>>>>>>>> > +      <AppenderRef ref="List"/>
>>>>>>>> > +      <ArrayBlockingQueue/>
>>>>>>>> > +    </Async>
>>>>>>>> > +  </Appenders>
>>>>>>>> > +
>>>>>>>> > +  <Loggers>
>>>>>>>> > +    <Root level="debug">
>>>>>>>> > +      <AppenderRef ref="Async"/>
>>>>>>>> > +    </Root>
>>>>>>>> > +  </Loggers>
>>>>>>>> > +
>>>>>>>> > +</Configuration>
>>>>>>>> > \ No newline at end of file
>>>>>>>> >
>>>>>>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>>>>>>> 5ec9bce/log4j-core/src/test/resources/BlockingQueueFactory-D
>>>>>>>> isruptorBlockingQueue.xml
>>>>>>>> > ------------------------------------------------------------
>>>>>>>> ----------
>>>>>>>> > diff --git a/log4j-core/src/test/resource
>>>>>>>> s/BlockingQueueFactory-DisruptorBlockingQueue.xml
>>>>>>>> b/log4j-core/src/test/resources/BlockingQueueFactory-Disrupt
>>>>>>>> orBlockingQueue.xml
>>>>>>>> > new file mode 100644
>>>>>>>> > index 0000000..268cca7
>>>>>>>> > --- /dev/null
>>>>>>>> > +++ b/log4j-core/src/test/resources/BlockingQueueFactory-Disrupt
>>>>>>>> orBlockingQueue.xml
>>>>>>>> > @@ -0,0 +1,40 @@
>>>>>>>> > +<?xml version="1.0" encoding="UTF-8"?>
>>>>>>>> > +<!--
>>>>>>>> > + Licensed to the Apache Software Foundation (ASF) under one or
>>>>>>>> more
>>>>>>>> > + contributor license agreements.  See the NOTICE file
>>>>>>>> distributed with
>>>>>>>> > + this work for additional information regarding copyright
>>>>>>>> ownership.
>>>>>>>> > + The ASF licenses this file to You under the Apache License,
>>>>>>>> Version 2.0
>>>>>>>> > + (the "License"); you may not use this file except in compliance
>>>>>>>> with
>>>>>>>> > + the License.  You may obtain a copy of the License at
>>>>>>>> > +
>>>>>>>> > +      http://www.apache.org/licenses/LICENSE-2.0
>>>>>>>> > +
>>>>>>>> > + Unless required by applicable law or agreed to in writing,
>>>>>>>> software
>>>>>>>> > + distributed under the License is distributed on an "AS IS"
>>>>>>>> BASIS,
>>>>>>>> > + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>>>>>>>> implied.
>>>>>>>> > + See the License for the specific language governing permissions
>>>>>>>> and
>>>>>>>> > + limitations under the License.
>>>>>>>> > +
>>>>>>>> > +-->
>>>>>>>> > +<Configuration status="OFF" name="DisruptorBlockingQueueFa
>>>>>>>> ctory">
>>>>>>>> > +
>>>>>>>> > +  <Appenders>
>>>>>>>> > +    <Console name="STDOUT">
>>>>>>>> > +      <PatternLayout pattern="%m%n"/>
>>>>>>>> > +    </Console>
>>>>>>>> > +    <List name="List">
>>>>>>>> > +      <PatternLayout pattern="%C %M %m"/>
>>>>>>>> > +    </List>
>>>>>>>> > +    <Async name="Async" includeLocation="true"
>>>>>>>> error-ref="STDOUT">
>>>>>>>> > +      <AppenderRef ref="List"/>
>>>>>>>> > +      <DisruptorBlockingQueue/>
>>>>>>>> > +    </Async>
>>>>>>>> > +  </Appenders>
>>>>>>>> > +
>>>>>>>> > +  <Loggers>
>>>>>>>> > +    <Root level="debug">
>>>>>>>> > +      <AppenderRef ref="Async"/>
>>>>>>>> > +    </Root>
>>>>>>>> > +  </Loggers>
>>>>>>>> > +
>>>>>>>> > +</Configuration>
>>>>>>>> > \ No newline at end of file
>>>>>>>> >
>>>>>>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>>>>>>> 5ec9bce/log4j-core/src/test/resources/BlockingQueueFactory-L
>>>>>>>> inkedTransferQueue.xml
>>>>>>>> > ------------------------------------------------------------
>>>>>>>> ----------
>>>>>>>> > diff --git a/log4j-core/src/test/resource
>>>>>>>> s/BlockingQueueFactory-LinkedTransferQueue.xml
>>>>>>>> b/log4j-core/src/test/resources/BlockingQueueFactory-LinkedT
>>>>>>>> ransferQueue.xml
>>>>>>>> > new file mode 100644
>>>>>>>> > index 0000000..13063d3
>>>>>>>> > --- /dev/null
>>>>>>>> > +++ b/log4j-core/src/test/resources/BlockingQueueFactory-LinkedT
>>>>>>>> ransferQueue.xml
>>>>>>>> > @@ -0,0 +1,40 @@
>>>>>>>> > +<?xml version="1.0" encoding="UTF-8"?>
>>>>>>>> > +<!--
>>>>>>>> > + Licensed to the Apache Software Foundation (ASF) under one or
>>>>>>>> more
>>>>>>>> > + contributor license agreements.  See the NOTICE file
>>>>>>>> distributed with
>>>>>>>> > + this work for additional information regarding copyright
>>>>>>>> ownership.
>>>>>>>> > + The ASF licenses this file to You under the Apache License,
>>>>>>>> Version 2.0
>>>>>>>> > + (the "License"); you may not use this file except in compliance
>>>>>>>> with
>>>>>>>> > + the License.  You may obtain a copy of the License at
>>>>>>>> > +
>>>>>>>> > +      http://www.apache.org/licenses/LICENSE-2.0
>>>>>>>> > +
>>>>>>>> > + Unless required by applicable law or agreed to in writing,
>>>>>>>> software
>>>>>>>> > + distributed under the License is distributed on an "AS IS"
>>>>>>>> BASIS,
>>>>>>>> > + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>>>>>>>> implied.
>>>>>>>> > + See the License for the specific language governing permissions
>>>>>>>> and
>>>>>>>> > + limitations under the License.
>>>>>>>> > +
>>>>>>>> > +-->
>>>>>>>> > +<Configuration status="OFF" name="LinkedTransferQueueFactory">
>>>>>>>> > +
>>>>>>>> > +  <Appenders>
>>>>>>>> > +    <Console name="STDOUT">
>>>>>>>> > +      <PatternLayout pattern="%m%n"/>
>>>>>>>> > +    </Console>
>>>>>>>> > +    <List name="List">
>>>>>>>> > +      <PatternLayout pattern="%C %M %m"/>
>>>>>>>> > +    </List>
>>>>>>>> > +    <Async name="Async" includeLocation="true"
>>>>>>>> error-ref="STDOUT">
>>>>>>>> > +      <AppenderRef ref="List"/>
>>>>>>>> > +      <LinkedTransferQueue/>
>>>>>>>> > +    </Async>
>>>>>>>> > +  </Appenders>
>>>>>>>> > +
>>>>>>>> > +  <Loggers>
>>>>>>>> > +    <Root level="debug">
>>>>>>>> > +      <AppenderRef ref="Async"/>
>>>>>>>> > +    </Root>
>>>>>>>> > +  </Loggers>
>>>>>>>> > +
>>>>>>>> > +</Configuration>
>>>>>>>> > \ No newline at end of file
>>>>>>>> >
>>>>>>>> >
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> ------------------------------------------------------------
>>>>>>>> ---------
>>>>>>>> To unsubscribe, e-mail: log4j-dev-unsubscribe@logging.apache.org
>>>>>>>> For additional commands, e-mail: log4j-dev-help@logging.apache.org
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> 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
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> 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
>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Matt Sicker <bo...@gmail.com>
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> Matt Sicker <bo...@gmail.com>
>>>>
>>>
>>>
>>
>>
>> --
>> Matt Sicker <bo...@gmail.com>
>>
>
>
>
> --
> Matt Sicker <bo...@gmail.com>
>
>
>


-- 
Matt Sicker <bo...@gmail.com>

Re: [13/36] logging-log4j2 git commit: Convert BlockingQueueFactory into a plugin element

Posted by Matt Sicker <bo...@gmail.com>.
Alright, he's released a Java 7 version of the library. I'm testing it out
now. This should fix the build issue. Users can override the library with
the Java 8 version if they wish by excluding the JDK7 artifact and
including the JDK8 one.

On 6 September 2016 at 14:19, Matt Sicker <bo...@gmail.com> wrote:

> Also, for the risk of using Java 8 library methods, that's the whole point
> of the animal-sniffer plugin.
>
> On 6 September 2016 at 14:01, Ralph Goers <ra...@dslextreme.com>
> wrote:
>
>> I only run the release build using the compiler for the target release.
>> All the target option really does is set the release version to the correct
>> value and verify you aren’t using language constructs from the newer java
>> version. Using Java 8 with a target of Java 7 runs the risk that you still
>> might be dependent on Java 8 library methods and not know about it.
>>
>> So whatever solution you come up with needs to work when running the
>> build with Java 7.
>>
>> Ralph
>>
>>
>>
>>
>> On Sep 6, 2016, at 9:23 AM, Matt Sicker <bo...@gmail.com> wrote:
>>
>> By that I mean they set their compiler version to 1.6 for src/main/ and
>> 1.8 for src/test/ which shouldn't affect us as we're not using their test
>> artifact.
>>
>> On 6 September 2016 at 11:22, Matt Sicker <bo...@gmail.com> wrote:
>>
>>> JCTools requires 1.6 for the build and 1.8 for the test. It appears we
>>> could do the same if the only thing failing the build is a unit test, but
>>> if the whole build is failing on Java 7, then I can back out those changes
>>> into a separate branch for future inclusion.
>>>
>>> On 6 September 2016 at 11:18, Remko Popma <re...@gmail.com> wrote:
>>>
>>>> Does JCTools require Java 8? One option is for this release to leave
>>>> out the Conversant library and only include JCTools and the TransferQueue.
>>>>
>>>> On Wed, Sep 7, 2016 at 1:06 AM, Matt Sicker <bo...@gmail.com> wrote:
>>>>
>>>>> I can't believe I didn't notice it, but the Conversant library does
>>>>> require Java 8. It's an optional dependency, so what to do? We can build on
>>>>> Java 8 with a target for Java 7 and use the animal-sniffer Maven plugin to
>>>>> make sure we don't accidentally use anything from Java 8.
>>>>>
>>>>> On 5 September 2016 at 22:45, Matt Sicker <bo...@gmail.com> wrote:
>>>>>
>>>>>> It looks like I may have merged prematurely then. I think I've been
>>>>>> running builds using Java 8 as well and didn't notice this. Jenkins isn't
>>>>>> even loading for me, so I can't see what the problem is on there. I'll take
>>>>>> a look at this tomorrow, and if I can't fix the dependency issue, I'll back
>>>>>> out part of this feature for now.
>>>>>>
>>>>>> On 5 September 2016 at 17:03, Ralph Goers <ralph.goers@dslextreme.com
>>>>>> > wrote:
>>>>>>
>>>>>>> Jenkins and the release builds use Java 7, so you should certainly
>>>>>>> use Java 7 from time to time.
>>>>>>>
>>>>>>> Ralph
>>>>>>>
>>>>>>> On Sep 5, 2016, at 2:33 PM, Gary Gregory <ga...@gmail.com>
>>>>>>> wrote:
>>>>>>>
>>>>>>> Ah, no, Java 8:
>>>>>>>
>>>>>>> Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5;
>>>>>>> 2015-11-10T08:41:47-08:00)
>>>>>>> Maven home: E:\Java\apache-maven-3.3.9
>>>>>>> Java version: 1.8.0_101, vendor: Oracle Corporation
>>>>>>> Java home: C:\Program Files\Java\jdk1.8.0_101\jre
>>>>>>> Default locale: en_US, platform encoding: Cp1252
>>>>>>> OS name: "windows 7", version: "6.1", arch: "amd64", family: "dos"
>>>>>>>
>>>>>>> Gary
>>>>>>>
>>>>>>> On Mon, Sep 5, 2016 at 5:32 PM, Ralph Goers <
>>>>>>> ralph.goers@dslextreme.com> wrote:
>>>>>>>
>>>>>>>> And you are building with Java 7?
>>>>>>>>
>>>>>>>> Ralph
>>>>>>>>
>>>>>>>> On Sep 5, 2016, at 2:18 PM, Gary Gregory <ga...@gmail.com>
>>>>>>>> wrote:
>>>>>>>>
>>>>>>>> Locally, I get:
>>>>>>>>
>>>>>>>> Failed tests:
>>>>>>>>   RoutingAppenderWithPurgingTest.routingTest:91 Incorrect number
>>>>>>>> of appenders with IdlePurgePolicy. expected:<3> but was:<1>
>>>>>>>>
>>>>>>>> Gary
>>>>>>>>
>>>>>>>> On Mon, Sep 5, 2016 at 12:54 PM, Ralph Goers <
>>>>>>>> ralph.goers@dslextreme.com> wrote:
>>>>>>>>
>>>>>>>>> For the record, I am voting -1 on this commit.  It breaks the
>>>>>>>>> build because the DisruptorBlockingQueueFactory has a dependency that
>>>>>>>>> requires Java 8. The 2.7 release is blocked until this is corrected.
>>>>>>>>>
>>>>>>>>> Ralph
>>>>>>>>>
>>>>>>>>> > On Sep 4, 2016, at 11:38 AM, mattsicker@apache.org wrote:
>>>>>>>>> >
>>>>>>>>> > Convert BlockingQueueFactory into a plugin element
>>>>>>>>> >
>>>>>>>>> > Related to LOG4J2-1430.
>>>>>>>>> >
>>>>>>>>> >
>>>>>>>>> > Project: http://git-wip-us.apache.org/r
>>>>>>>>> epos/asf/logging-log4j2/repo
>>>>>>>>> > Commit: http://git-wip-us.apache.org/r
>>>>>>>>> epos/asf/logging-log4j2/commit/65ec9bce
>>>>>>>>> > Tree: http://git-wip-us.apache.org/r
>>>>>>>>> epos/asf/logging-log4j2/tree/65ec9bce
>>>>>>>>> > Diff: http://git-wip-us.apache.org/r
>>>>>>>>> epos/asf/logging-log4j2/diff/65ec9bce
>>>>>>>>> >
>>>>>>>>> > Branch: refs/heads/master
>>>>>>>>> > Commit: 65ec9bcef74dc30ecab9c2091c6e0638d53490d8
>>>>>>>>> > Parents: 0848d7a
>>>>>>>>> > Author: Matt Sicker <bo...@gmail.com>
>>>>>>>>> > Authored: Fri Jun 17 18:51:08 2016 -0500
>>>>>>>>> > Committer: Matt Sicker <bo...@gmail.com>
>>>>>>>>> > Committed: Fri Jun 17 18:51:08 2016 -0500
>>>>>>>>> >
>>>>>>>>> > ------------------------------------------------------------
>>>>>>>>> ----------
>>>>>>>>> > .../log4j/core/appender/AsyncAppender.java      | 24
>>>>>>>>> +++++++++---
>>>>>>>>> > .../core/async/ArrayBlockingQueueFactory.java   | 10 +++++
>>>>>>>>> > .../log4j/core/async/BlockingQueueFactory.java  | 13 ++++++-
>>>>>>>>> > .../async/DisruptorBlockingQueueFactory.java    | 11 +++++-
>>>>>>>>> > .../core/async/LinkedTransferQueueFactory.java  | 10 +++++
>>>>>>>>> > .../log4j/core/appender/AsyncAppenderTest.java  | 16 ++++----
>>>>>>>>> > .../BlockingQueueFactory-ArrayBlockingQueue.xml | 40
>>>>>>>>> ++++++++++++++++++++
>>>>>>>>> > ...ckingQueueFactory-DisruptorBlockingQueue.xml | 40
>>>>>>>>> ++++++++++++++++++++
>>>>>>>>> > ...BlockingQueueFactory-LinkedTransferQueue.xml | 40
>>>>>>>>> ++++++++++++++++++++
>>>>>>>>> > 9 files changed, 189 insertions(+), 15 deletions(-)
>>>>>>>>> > ------------------------------------------------------------
>>>>>>>>> ----------
>>>>>>>>> >
>>>>>>>>> >
>>>>>>>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>>>>>>>> 5ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/co
>>>>>>>>> re/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/app
>>>>>>>>> ender/AsyncAppender.java
>>>>>>>>> > index 3c9c37c..dee5e50 100644
>>>>>>>>> > --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/app
>>>>>>>>> ender/AsyncAppender.java
>>>>>>>>> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/app
>>>>>>>>> ender/AsyncAppender.java
>>>>>>>>> > @@ -26,8 +26,11 @@ 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;
>>>>>>>>> > +import org.apache.logging.log4j.core.
>>>>>>>>> async.ArrayBlockingQueueFactory;
>>>>>>>>> > import org.apache.logging.log4j.core.async.AsyncQueueFullPolicy;
>>>>>>>>> > import org.apache.logging.log4j.core.
>>>>>>>>> async.AsyncQueueFullPolicyFactory;
>>>>>>>>> > +import org.apache.logging.log4j.core.
>>>>>>>>> async.BlockingQueueFactory;
>>>>>>>>> > +import org.apache.logging.log4j.core.
>>>>>>>>> async.BlockingQueueFactoryUtil;
>>>>>>>>> > import org.apache.logging.log4j.core.
>>>>>>>>> async.DiscardingAsyncQueueFullPolicy;
>>>>>>>>> > import org.apache.logging.log4j.core.async.EventRoute;
>>>>>>>>> > import org.apache.logging.log4j.core.config.AppenderControl;
>>>>>>>>> > @@ -42,7 +45,6 @@ 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.validation.constraints.Required;
>>>>>>>>> > import org.apache.logging.log4j.core.impl.Log4jLogEvent;
>>>>>>>>> > -import org.apache.logging.log4j.core.
>>>>>>>>> async.BlockingQueueFactoryUtil;
>>>>>>>>> > import org.apache.logging.log4j.core.util.Constants;
>>>>>>>>> >
>>>>>>>>> > /**
>>>>>>>>> > @@ -73,8 +75,8 @@ public final class AsyncAppender extends
>>>>>>>>> AbstractAppender {
>>>>>>>>> >
>>>>>>>>> >     private AsyncAppender(final String name, final Filter
>>>>>>>>> filter, final AppenderRef[] appenderRefs,
>>>>>>>>> >                           final String errorRef, final int
>>>>>>>>> queueSize, final boolean blocking,
>>>>>>>>> > -                          final boolean ignoreExceptions,
>>>>>>>>> > -                          final long shutdownTimeout, final
>>>>>>>>> Configuration config, final boolean includeLocation) {
>>>>>>>>> > +                          final boolean ignoreExceptions, final
>>>>>>>>> long shutdownTimeout, final Configuration config,
>>>>>>>>> > +                          final boolean includeLocation, final
>>>>>>>>> BlockingQueueFactory<LogEvent> blockingQueueFactory) {
>>>>>>>>> >         super(name, filter, null, ignoreExceptions);
>>>>>>>>> >         this.queue = BlockingQueueFactoryUtil.<LogE
>>>>>>>>> vent>getBlockingQueueFactory().create(queueSize);
>>>>>>>>> >         this.queueSize = queueSize;
>>>>>>>>> > @@ -217,7 +219,9 @@ public final class AsyncAppender extends
>>>>>>>>> AbstractAppender {
>>>>>>>>> >     }
>>>>>>>>> >
>>>>>>>>> >     /**
>>>>>>>>> > -     * Create an AsyncAppender.
>>>>>>>>> > +     * Create an AsyncAppender. This method is retained for
>>>>>>>>> backwards compatibility. New code should use the
>>>>>>>>> > +     * {@link Builder} instead. This factory will use {@link
>>>>>>>>> ArrayBlockingQueueFactory} by default as was the behavior
>>>>>>>>> > +     * pre-2.7.
>>>>>>>>> >      *
>>>>>>>>> >      * @param appenderRefs     The Appenders to reference.
>>>>>>>>> >      * @param errorRef         An optional Appender to write to
>>>>>>>>> if the queue is full or other errors occur.
>>>>>>>>> > @@ -247,7 +251,7 @@ public final class AsyncAppender extends
>>>>>>>>> AbstractAppender {
>>>>>>>>> >         }
>>>>>>>>> >
>>>>>>>>> >         return new AsyncAppender(name, filter, appenderRefs,
>>>>>>>>> errorRef, size, blocking, ignoreExceptions,
>>>>>>>>> > -            shutdownTimeout, config, includeLocation);
>>>>>>>>> > +            shutdownTimeout, config, includeLocation, new
>>>>>>>>> ArrayBlockingQueueFactory<LogEvent>());
>>>>>>>>> >     }
>>>>>>>>> >
>>>>>>>>> >     @PluginBuilderFactory
>>>>>>>>> > @@ -290,6 +294,9 @@ public final class AsyncAppender extends
>>>>>>>>> AbstractAppender {
>>>>>>>>> >         @PluginBuilderAttribute
>>>>>>>>> >         private boolean ignoreExceptions = true;
>>>>>>>>> >
>>>>>>>>> > +        @PluginElement(BlockingQueueFactory.ELEMENT_TYPE)
>>>>>>>>> > +        private BlockingQueueFactory<LogEvent>
>>>>>>>>> blockingQueueFactory = new ArrayBlockingQueueFactory<>();
>>>>>>>>> > +
>>>>>>>>> >         public Builder setAppenderRefs(AppenderRef[]
>>>>>>>>> appenderRefs) {
>>>>>>>>> >             this.appenderRefs = appenderRefs;
>>>>>>>>> >             return this;
>>>>>>>>> > @@ -340,10 +347,15 @@ public final class AsyncAppender extends
>>>>>>>>> AbstractAppender {
>>>>>>>>> >             return this;
>>>>>>>>> >         }
>>>>>>>>> >
>>>>>>>>> > +        public Builder setBlockingQueueFactory(final
>>>>>>>>> BlockingQueueFactory<LogEvent> blockingQueueFactory) {
>>>>>>>>> > +            this.blockingQueueFactory = blockingQueueFactory;
>>>>>>>>> > +            return this;
>>>>>>>>> > +        }
>>>>>>>>> > +
>>>>>>>>> >         @Override
>>>>>>>>> >         public AsyncAppender build() {
>>>>>>>>> >             return new AsyncAppender(name, filter, appenderRefs,
>>>>>>>>> errorRef, bufferSize, blocking, ignoreExceptions,
>>>>>>>>> > -                shutdownTimeout, configuration,
>>>>>>>>> includeLocation);
>>>>>>>>> > +                shutdownTimeout, configuration,
>>>>>>>>> includeLocation, blockingQueueFactory);
>>>>>>>>> >         }
>>>>>>>>> >     }
>>>>>>>>> >
>>>>>>>>> >
>>>>>>>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>>>>>>>> 5ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/co
>>>>>>>>> re/async/ArrayBlockingQueueFactory.java
>>>>>>>>> > ------------------------------------------------------------
>>>>>>>>> ----------
>>>>>>>>> > diff --git a/log4j-core/src/main/java/org
>>>>>>>>> /apache/logging/log4j/core/async/ArrayBlockingQueueFactory.java
>>>>>>>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>>>>>> nc/ArrayBlockingQueueFactory.java
>>>>>>>>> > index e9c99b8..dcad78a 100644
>>>>>>>>> > --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>>>>>> nc/ArrayBlockingQueueFactory.java
>>>>>>>>> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>>>>>> nc/ArrayBlockingQueueFactory.java
>>>>>>>>> > @@ -3,14 +3,24 @@ package org.apache.logging.log4j.core.async;
>>>>>>>>> > import java.util.concurrent.ArrayBlockingQueue;
>>>>>>>>> > import java.util.concurrent.BlockingQueue;
>>>>>>>>> >
>>>>>>>>> > +import org.apache.logging.log4j.core.config.Node;
>>>>>>>>> > +import org.apache.logging.log4j.core.config.plugins.Plugin;
>>>>>>>>> > +import org.apache.logging.log4j.core.
>>>>>>>>> config.plugins.PluginFactory;
>>>>>>>>> > +
>>>>>>>>> > /**
>>>>>>>>> >  * Factory for creating instances of {@link ArrayBlockingQueue}.
>>>>>>>>> >  *
>>>>>>>>> >  * @since 2.7
>>>>>>>>> >  */
>>>>>>>>> > +@Plugin(name = "ArrayBlockingQueue", category = Node.CATEGORY,
>>>>>>>>> elementType = BlockingQueueFactory.ELEMENT_TYPE)
>>>>>>>>> > public class ArrayBlockingQueueFactory<E> implements
>>>>>>>>> BlockingQueueFactory<E> {
>>>>>>>>> >     @Override
>>>>>>>>> >     public BlockingQueue<E> create(int capacity) {
>>>>>>>>> >         return new ArrayBlockingQueue<>(capacity);
>>>>>>>>> >     }
>>>>>>>>> > +
>>>>>>>>> > +    @PluginFactory
>>>>>>>>> > +    public static <E> ArrayBlockingQueueFactory<E>
>>>>>>>>> createFactory() {
>>>>>>>>> > +        return new ArrayBlockingQueueFactory<>();
>>>>>>>>> > +    }
>>>>>>>>> > }
>>>>>>>>> >
>>>>>>>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>>>>>>>> 5ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/co
>>>>>>>>> re/async/BlockingQueueFactory.java
>>>>>>>>> > ------------------------------------------------------------
>>>>>>>>> ----------
>>>>>>>>> > diff --git a/log4j-core/src/main/java/org
>>>>>>>>> /apache/logging/log4j/core/async/BlockingQueueFactory.java
>>>>>>>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>>>>>> nc/BlockingQueueFactory.java
>>>>>>>>> > index ccd1625..5763d1e 100644
>>>>>>>>> > --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>>>>>> nc/BlockingQueueFactory.java
>>>>>>>>> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>>>>>> nc/BlockingQueueFactory.java
>>>>>>>>> > @@ -9,7 +9,18 @@ import java.util.concurrent.BlockingQueue;
>>>>>>>>> >  */
>>>>>>>>> > public interface BlockingQueueFactory<E> {
>>>>>>>>> >
>>>>>>>>> > -    String PROPERTY = "log4j.BlockingQueueFactory";
>>>>>>>>> > +    /**
>>>>>>>>> > +     * The {@link org.apache.logging.log4j.core.
>>>>>>>>> config.plugins.Plugin#elementType() element type} to use for
>>>>>>>>> plugins
>>>>>>>>> > +     * implementing this interface.
>>>>>>>>> > +     */
>>>>>>>>> > +    String ELEMENT_TYPE = "BlockingQueueFactory";
>>>>>>>>> >
>>>>>>>>> > +    /**
>>>>>>>>> > +     * Creates a new BlockingQueue with the specified maximum
>>>>>>>>> capacity. Note that not all implementations of
>>>>>>>>> > +     * BlockingQueue support a bounded capacity in which case
>>>>>>>>> the value is ignored.
>>>>>>>>> > +     *
>>>>>>>>> > +     * @param capacity maximum size of the queue if supported
>>>>>>>>> > +     * @return a new BlockingQueue
>>>>>>>>> > +     */
>>>>>>>>> >     BlockingQueue<E> create(int capacity);
>>>>>>>>> > }
>>>>>>>>> >
>>>>>>>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>>>>>>>> 5ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/co
>>>>>>>>> re/async/DisruptorBlockingQueueFactory.java
>>>>>>>>> > ------------------------------------------------------------
>>>>>>>>> ----------
>>>>>>>>> > diff --git a/log4j-core/src/main/java/org
>>>>>>>>> /apache/logging/log4j/core/async/DisruptorBlockingQueueFactory.java
>>>>>>>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>>>>>> nc/DisruptorBlockingQueueFactory.java
>>>>>>>>> > index 8fb3707..add375d 100644
>>>>>>>>> > --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>>>>>> nc/DisruptorBlockingQueueFactory.java
>>>>>>>>> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>>>>>> nc/DisruptorBlockingQueueFactory.java
>>>>>>>>> > @@ -3,15 +3,24 @@ package org.apache.logging.log4j.core.async;
>>>>>>>>> > import java.util.concurrent.BlockingQueue;
>>>>>>>>> >
>>>>>>>>> > import com.conversantmedia.util.concu
>>>>>>>>> rrent.DisruptorBlockingQueue;
>>>>>>>>> > +import org.apache.logging.log4j.core.config.Node;
>>>>>>>>> > +import org.apache.logging.log4j.core.config.plugins.Plugin;
>>>>>>>>> > +import org.apache.logging.log4j.core.
>>>>>>>>> config.plugins.PluginFactory;
>>>>>>>>> >
>>>>>>>>> > /**
>>>>>>>>> >  * Factory for creating instances of {@link
>>>>>>>>> DisruptorBlockingQueue}.
>>>>>>>>> >  *
>>>>>>>>> >  * @since 2.7
>>>>>>>>> >  */
>>>>>>>>> > +@Plugin(name = "DisruptorBlockingQueue", category =
>>>>>>>>> Node.CATEGORY, elementType = BlockingQueueFactory.ELEMENT_TYPE)
>>>>>>>>> > public class DisruptorBlockingQueueFactory<E> implements
>>>>>>>>> BlockingQueueFactory<E> {
>>>>>>>>> >     @Override
>>>>>>>>> >     public BlockingQueue<E> create(int capacity) {
>>>>>>>>> > -        return new DisruptorBlockingQueue<E>(capacity);
>>>>>>>>> > +        return new DisruptorBlockingQueue<>(capacity);
>>>>>>>>> > +    }
>>>>>>>>> > +
>>>>>>>>> > +    @PluginFactory
>>>>>>>>> > +    public static <E> DisruptorBlockingQueueFactory<E>
>>>>>>>>> createFactory() {
>>>>>>>>> > +        return new DisruptorBlockingQueueFactory<>();
>>>>>>>>> >     }
>>>>>>>>> > }
>>>>>>>>> >
>>>>>>>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>>>>>>>> 5ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/co
>>>>>>>>> re/async/LinkedTransferQueueFactory.java
>>>>>>>>> > ------------------------------------------------------------
>>>>>>>>> ----------
>>>>>>>>> > diff --git a/log4j-core/src/main/java/org
>>>>>>>>> /apache/logging/log4j/core/async/LinkedTransferQueueFactory.java
>>>>>>>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>>>>>> nc/LinkedTransferQueueFactory.java
>>>>>>>>> > index 862fab3..6ab24e7 100644
>>>>>>>>> > --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>>>>>> nc/LinkedTransferQueueFactory.java
>>>>>>>>> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>>>>>> nc/LinkedTransferQueueFactory.java
>>>>>>>>> > @@ -20,14 +20,24 @@ package org.apache.logging.log4j.core.async;
>>>>>>>>> > import java.util.concurrent.BlockingQueue;
>>>>>>>>> > import java.util.concurrent.LinkedTransferQueue;
>>>>>>>>> >
>>>>>>>>> > +import org.apache.logging.log4j.core.config.Node;
>>>>>>>>> > +import org.apache.logging.log4j.core.config.plugins.Plugin;
>>>>>>>>> > +import org.apache.logging.log4j.core.
>>>>>>>>> config.plugins.PluginFactory;
>>>>>>>>> > +
>>>>>>>>> > /**
>>>>>>>>> >  * Factory for creating instances of {@link LinkedTransferQueue}.
>>>>>>>>> >  *
>>>>>>>>> >  * @since 2.7
>>>>>>>>> >  */
>>>>>>>>> > +@Plugin(name = "LinkedTransferQueue", category = Node.CATEGORY,
>>>>>>>>> elementType = BlockingQueueFactory.ELEMENT_TYPE)
>>>>>>>>> > public class LinkedTransferQueueFactory<E> implements
>>>>>>>>> BlockingQueueFactory<E> {
>>>>>>>>> >     @Override
>>>>>>>>> >     public BlockingQueue<E> create(int capacity) {
>>>>>>>>> >         return new LinkedTransferQueue<>();
>>>>>>>>> >     }
>>>>>>>>> > +
>>>>>>>>> > +    @PluginFactory
>>>>>>>>> > +    public static <E> LinkedTransferQueueFactory<E>
>>>>>>>>> createFactory() {
>>>>>>>>> > +        return new LinkedTransferQueueFactory<>();
>>>>>>>>> > +    }
>>>>>>>>> > }
>>>>>>>>> >
>>>>>>>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>>>>>>>> 5ec9bce/log4j-core/src/test/java/org/apache/logging/log4j/co
>>>>>>>>> re/appender/AsyncAppenderTest.java
>>>>>>>>> > ------------------------------------------------------------
>>>>>>>>> ----------
>>>>>>>>> > diff --git a/log4j-core/src/test/java/org
>>>>>>>>> /apache/logging/log4j/core/appender/AsyncAppenderTest.java
>>>>>>>>> b/log4j-core/src/test/java/org/apache/logging/log4j/core/app
>>>>>>>>> ender/AsyncAppenderTest.java
>>>>>>>>> > index 3066f38..076fdd0 100644
>>>>>>>>> > --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/app
>>>>>>>>> ender/AsyncAppenderTest.java
>>>>>>>>> > +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/app
>>>>>>>>> ender/AsyncAppenderTest.java
>>>>>>>>> > @@ -41,19 +41,21 @@ import static org.junit.Assert.*;
>>>>>>>>> >  */
>>>>>>>>> > @RunWith(Parameterized.class)
>>>>>>>>> > public class AsyncAppenderTest {
>>>>>>>>> > -    private static final String CONFIG = "log4j-asynch.xml";
>>>>>>>>> >
>>>>>>>>> >     @Parameterized.Parameters
>>>>>>>>> >     public static Object[] data() {
>>>>>>>>> > -        return new Class<?>[]{
>>>>>>>>> > -            ArrayBlockingQueueFactory.class,
>>>>>>>>> > -            DisruptorBlockingQueueFactory.class,
>>>>>>>>> > -            LinkedTransferQueueFactory.class
>>>>>>>>> > +        return new String[]{
>>>>>>>>> > +            // default async config uses array blocking queue
>>>>>>>>> > +            "log4j-asynch.xml",
>>>>>>>>> > +            // override default blocking queue implementations
>>>>>>>>> > +            "BlockingQueueFactory-ArrayBlockingQueue.xml",
>>>>>>>>> > +            "BlockingQueueFactory-DisruptorBlockingQueue.xml",
>>>>>>>>> > +            "BlockingQueueFactory-LinkedTransferQueue.xml"
>>>>>>>>> >         };
>>>>>>>>> >     }
>>>>>>>>> >
>>>>>>>>> > -    public AsyncAppenderTest(final Class<? extends
>>>>>>>>> BlockingQueueFactory> factory) {
>>>>>>>>> > -        context = new LoggerContextRule(CONFIG).with
>>>>>>>>> SystemProperty(BlockingQueueFactory.PROPERTY, factory.getName());
>>>>>>>>> > +    public AsyncAppenderTest(final String configFileName) {
>>>>>>>>> > +        context = new LoggerContextRule(configFileName);
>>>>>>>>> >     }
>>>>>>>>> >
>>>>>>>>> >     @Rule
>>>>>>>>> >
>>>>>>>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>>>>>>>> 5ec9bce/log4j-core/src/test/resources/BlockingQueueFactory-A
>>>>>>>>> rrayBlockingQueue.xml
>>>>>>>>> > ------------------------------------------------------------
>>>>>>>>> ----------
>>>>>>>>> > diff --git a/log4j-core/src/test/resource
>>>>>>>>> s/BlockingQueueFactory-ArrayBlockingQueue.xml
>>>>>>>>> b/log4j-core/src/test/resources/BlockingQueueFactory-ArrayBl
>>>>>>>>> ockingQueue.xml
>>>>>>>>> > new file mode 100644
>>>>>>>>> > index 0000000..e8bbfa6
>>>>>>>>> > --- /dev/null
>>>>>>>>> > +++ b/log4j-core/src/test/resources/BlockingQueueFactory-ArrayBl
>>>>>>>>> ockingQueue.xml
>>>>>>>>> > @@ -0,0 +1,40 @@
>>>>>>>>> > +<?xml version="1.0" encoding="UTF-8"?>
>>>>>>>>> > +<!--
>>>>>>>>> > + Licensed to the Apache Software Foundation (ASF) under one or
>>>>>>>>> more
>>>>>>>>> > + contributor license agreements.  See the NOTICE file
>>>>>>>>> distributed with
>>>>>>>>> > + this work for additional information regarding copyright
>>>>>>>>> ownership.
>>>>>>>>> > + The ASF licenses this file to You under the Apache License,
>>>>>>>>> Version 2.0
>>>>>>>>> > + (the "License"); you may not use this file except in
>>>>>>>>> compliance with
>>>>>>>>> > + the License.  You may obtain a copy of the License at
>>>>>>>>> > +
>>>>>>>>> > +      http://www.apache.org/licenses/LICENSE-2.0
>>>>>>>>> > +
>>>>>>>>> > + Unless required by applicable law or agreed to in writing,
>>>>>>>>> software
>>>>>>>>> > + distributed under the License is distributed on an "AS IS"
>>>>>>>>> BASIS,
>>>>>>>>> > + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
>>>>>>>>> or implied.
>>>>>>>>> > + See the License for the specific language governing
>>>>>>>>> permissions and
>>>>>>>>> > + limitations under the License.
>>>>>>>>> > +
>>>>>>>>> > +-->
>>>>>>>>> > +<Configuration status="OFF" name="ArrayBlockingQueueFactory">
>>>>>>>>> > +
>>>>>>>>> > +  <Appenders>
>>>>>>>>> > +    <Console name="STDOUT">
>>>>>>>>> > +      <PatternLayout pattern="%m%n"/>
>>>>>>>>> > +    </Console>
>>>>>>>>> > +    <List name="List">
>>>>>>>>> > +      <PatternLayout pattern="%C %M %m"/>
>>>>>>>>> > +    </List>
>>>>>>>>> > +    <Async name="Async" includeLocation="true"
>>>>>>>>> error-ref="STDOUT">
>>>>>>>>> > +      <AppenderRef ref="List"/>
>>>>>>>>> > +      <ArrayBlockingQueue/>
>>>>>>>>> > +    </Async>
>>>>>>>>> > +  </Appenders>
>>>>>>>>> > +
>>>>>>>>> > +  <Loggers>
>>>>>>>>> > +    <Root level="debug">
>>>>>>>>> > +      <AppenderRef ref="Async"/>
>>>>>>>>> > +    </Root>
>>>>>>>>> > +  </Loggers>
>>>>>>>>> > +
>>>>>>>>> > +</Configuration>
>>>>>>>>> > \ No newline at end of file
>>>>>>>>> >
>>>>>>>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>>>>>>>> 5ec9bce/log4j-core/src/test/resources/BlockingQueueFactory-D
>>>>>>>>> isruptorBlockingQueue.xml
>>>>>>>>> > ------------------------------------------------------------
>>>>>>>>> ----------
>>>>>>>>> > diff --git a/log4j-core/src/test/resource
>>>>>>>>> s/BlockingQueueFactory-DisruptorBlockingQueue.xml
>>>>>>>>> b/log4j-core/src/test/resources/BlockingQueueFactory-Disrupt
>>>>>>>>> orBlockingQueue.xml
>>>>>>>>> > new file mode 100644
>>>>>>>>> > index 0000000..268cca7
>>>>>>>>> > --- /dev/null
>>>>>>>>> > +++ b/log4j-core/src/test/resources/BlockingQueueFactory-Disrupt
>>>>>>>>> orBlockingQueue.xml
>>>>>>>>> > @@ -0,0 +1,40 @@
>>>>>>>>> > +<?xml version="1.0" encoding="UTF-8"?>
>>>>>>>>> > +<!--
>>>>>>>>> > + Licensed to the Apache Software Foundation (ASF) under one or
>>>>>>>>> more
>>>>>>>>> > + contributor license agreements.  See the NOTICE file
>>>>>>>>> distributed with
>>>>>>>>> > + this work for additional information regarding copyright
>>>>>>>>> ownership.
>>>>>>>>> > + The ASF licenses this file to You under the Apache License,
>>>>>>>>> Version 2.0
>>>>>>>>> > + (the "License"); you may not use this file except in
>>>>>>>>> compliance with
>>>>>>>>> > + the License.  You may obtain a copy of the License at
>>>>>>>>> > +
>>>>>>>>> > +      http://www.apache.org/licenses/LICENSE-2.0
>>>>>>>>> > +
>>>>>>>>> > + Unless required by applicable law or agreed to in writing,
>>>>>>>>> software
>>>>>>>>> > + distributed under the License is distributed on an "AS IS"
>>>>>>>>> BASIS,
>>>>>>>>> > + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
>>>>>>>>> or implied.
>>>>>>>>> > + See the License for the specific language governing
>>>>>>>>> permissions and
>>>>>>>>> > + limitations under the License.
>>>>>>>>> > +
>>>>>>>>> > +-->
>>>>>>>>> > +<Configuration status="OFF" name="DisruptorBlockingQueueFa
>>>>>>>>> ctory">
>>>>>>>>> > +
>>>>>>>>> > +  <Appenders>
>>>>>>>>> > +    <Console name="STDOUT">
>>>>>>>>> > +      <PatternLayout pattern="%m%n"/>
>>>>>>>>> > +    </Console>
>>>>>>>>> > +    <List name="List">
>>>>>>>>> > +      <PatternLayout pattern="%C %M %m"/>
>>>>>>>>> > +    </List>
>>>>>>>>> > +    <Async name="Async" includeLocation="true"
>>>>>>>>> error-ref="STDOUT">
>>>>>>>>> > +      <AppenderRef ref="List"/>
>>>>>>>>> > +      <DisruptorBlockingQueue/>
>>>>>>>>> > +    </Async>
>>>>>>>>> > +  </Appenders>
>>>>>>>>> > +
>>>>>>>>> > +  <Loggers>
>>>>>>>>> > +    <Root level="debug">
>>>>>>>>> > +      <AppenderRef ref="Async"/>
>>>>>>>>> > +    </Root>
>>>>>>>>> > +  </Loggers>
>>>>>>>>> > +
>>>>>>>>> > +</Configuration>
>>>>>>>>> > \ No newline at end of file
>>>>>>>>> >
>>>>>>>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>>>>>>>> 5ec9bce/log4j-core/src/test/resources/BlockingQueueFactory-L
>>>>>>>>> inkedTransferQueue.xml
>>>>>>>>> > ------------------------------------------------------------
>>>>>>>>> ----------
>>>>>>>>> > diff --git a/log4j-core/src/test/resource
>>>>>>>>> s/BlockingQueueFactory-LinkedTransferQueue.xml
>>>>>>>>> b/log4j-core/src/test/resources/BlockingQueueFactory-LinkedT
>>>>>>>>> ransferQueue.xml
>>>>>>>>> > new file mode 100644
>>>>>>>>> > index 0000000..13063d3
>>>>>>>>> > --- /dev/null
>>>>>>>>> > +++ b/log4j-core/src/test/resources/BlockingQueueFactory-LinkedT
>>>>>>>>> ransferQueue.xml
>>>>>>>>> > @@ -0,0 +1,40 @@
>>>>>>>>> > +<?xml version="1.0" encoding="UTF-8"?>
>>>>>>>>> > +<!--
>>>>>>>>> > + Licensed to the Apache Software Foundation (ASF) under one or
>>>>>>>>> more
>>>>>>>>> > + contributor license agreements.  See the NOTICE file
>>>>>>>>> distributed with
>>>>>>>>> > + this work for additional information regarding copyright
>>>>>>>>> ownership.
>>>>>>>>> > + The ASF licenses this file to You under the Apache License,
>>>>>>>>> Version 2.0
>>>>>>>>> > + (the "License"); you may not use this file except in
>>>>>>>>> compliance with
>>>>>>>>> > + the License.  You may obtain a copy of the License at
>>>>>>>>> > +
>>>>>>>>> > +      http://www.apache.org/licenses/LICENSE-2.0
>>>>>>>>> > +
>>>>>>>>> > + Unless required by applicable law or agreed to in writing,
>>>>>>>>> software
>>>>>>>>> > + distributed under the License is distributed on an "AS IS"
>>>>>>>>> BASIS,
>>>>>>>>> > + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
>>>>>>>>> or implied.
>>>>>>>>> > + See the License for the specific language governing
>>>>>>>>> permissions and
>>>>>>>>> > + limitations under the License.
>>>>>>>>> > +
>>>>>>>>> > +-->
>>>>>>>>> > +<Configuration status="OFF" name="LinkedTransferQueueFactory">
>>>>>>>>> > +
>>>>>>>>> > +  <Appenders>
>>>>>>>>> > +    <Console name="STDOUT">
>>>>>>>>> > +      <PatternLayout pattern="%m%n"/>
>>>>>>>>> > +    </Console>
>>>>>>>>> > +    <List name="List">
>>>>>>>>> > +      <PatternLayout pattern="%C %M %m"/>
>>>>>>>>> > +    </List>
>>>>>>>>> > +    <Async name="Async" includeLocation="true"
>>>>>>>>> error-ref="STDOUT">
>>>>>>>>> > +      <AppenderRef ref="List"/>
>>>>>>>>> > +      <LinkedTransferQueue/>
>>>>>>>>> > +    </Async>
>>>>>>>>> > +  </Appenders>
>>>>>>>>> > +
>>>>>>>>> > +  <Loggers>
>>>>>>>>> > +    <Root level="debug">
>>>>>>>>> > +      <AppenderRef ref="Async"/>
>>>>>>>>> > +    </Root>
>>>>>>>>> > +  </Loggers>
>>>>>>>>> > +
>>>>>>>>> > +</Configuration>
>>>>>>>>> > \ No newline at end of file
>>>>>>>>> >
>>>>>>>>> >
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> ------------------------------------------------------------
>>>>>>>>> ---------
>>>>>>>>> To unsubscribe, e-mail: log4j-dev-unsubscribe@logging.apache.org
>>>>>>>>> For additional commands, e-mail: log4j-dev-help@logging.apache.org
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> --
>>>>>>>> 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
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> 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
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> Matt Sicker <bo...@gmail.com>
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Matt Sicker <bo...@gmail.com>
>>>>>
>>>>
>>>>
>>>
>>>
>>> --
>>> Matt Sicker <bo...@gmail.com>
>>>
>>
>>
>>
>> --
>> Matt Sicker <bo...@gmail.com>
>>
>>
>>
>
>
> --
> Matt Sicker <bo...@gmail.com>
>



-- 
Matt Sicker <bo...@gmail.com>

Re: [13/36] logging-log4j2 git commit: Convert BlockingQueueFactory into a plugin element

Posted by Matt Sicker <bo...@gmail.com>.
Also, for the risk of using Java 8 library methods, that's the whole point
of the animal-sniffer plugin.

On 6 September 2016 at 14:01, Ralph Goers <ra...@dslextreme.com>
wrote:

> I only run the release build using the compiler for the target release.
> All the target option really does is set the release version to the correct
> value and verify you aren’t using language constructs from the newer java
> version. Using Java 8 with a target of Java 7 runs the risk that you still
> might be dependent on Java 8 library methods and not know about it.
>
> So whatever solution you come up with needs to work when running the build
> with Java 7.
>
> Ralph
>
>
>
>
> On Sep 6, 2016, at 9:23 AM, Matt Sicker <bo...@gmail.com> wrote:
>
> By that I mean they set their compiler version to 1.6 for src/main/ and
> 1.8 for src/test/ which shouldn't affect us as we're not using their test
> artifact.
>
> On 6 September 2016 at 11:22, Matt Sicker <bo...@gmail.com> wrote:
>
>> JCTools requires 1.6 for the build and 1.8 for the test. It appears we
>> could do the same if the only thing failing the build is a unit test, but
>> if the whole build is failing on Java 7, then I can back out those changes
>> into a separate branch for future inclusion.
>>
>> On 6 September 2016 at 11:18, Remko Popma <re...@gmail.com> wrote:
>>
>>> Does JCTools require Java 8? One option is for this release to leave out
>>> the Conversant library and only include JCTools and the TransferQueue.
>>>
>>> On Wed, Sep 7, 2016 at 1:06 AM, Matt Sicker <bo...@gmail.com> wrote:
>>>
>>>> I can't believe I didn't notice it, but the Conversant library does
>>>> require Java 8. It's an optional dependency, so what to do? We can build on
>>>> Java 8 with a target for Java 7 and use the animal-sniffer Maven plugin to
>>>> make sure we don't accidentally use anything from Java 8.
>>>>
>>>> On 5 September 2016 at 22:45, Matt Sicker <bo...@gmail.com> wrote:
>>>>
>>>>> It looks like I may have merged prematurely then. I think I've been
>>>>> running builds using Java 8 as well and didn't notice this. Jenkins isn't
>>>>> even loading for me, so I can't see what the problem is on there. I'll take
>>>>> a look at this tomorrow, and if I can't fix the dependency issue, I'll back
>>>>> out part of this feature for now.
>>>>>
>>>>> On 5 September 2016 at 17:03, Ralph Goers <ra...@dslextreme.com>
>>>>> wrote:
>>>>>
>>>>>> Jenkins and the release builds use Java 7, so you should certainly
>>>>>> use Java 7 from time to time.
>>>>>>
>>>>>> Ralph
>>>>>>
>>>>>> On Sep 5, 2016, at 2:33 PM, Gary Gregory <ga...@gmail.com>
>>>>>> wrote:
>>>>>>
>>>>>> Ah, no, Java 8:
>>>>>>
>>>>>> Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5;
>>>>>> 2015-11-10T08:41:47-08:00)
>>>>>> Maven home: E:\Java\apache-maven-3.3.9
>>>>>> Java version: 1.8.0_101, vendor: Oracle Corporation
>>>>>> Java home: C:\Program Files\Java\jdk1.8.0_101\jre
>>>>>> Default locale: en_US, platform encoding: Cp1252
>>>>>> OS name: "windows 7", version: "6.1", arch: "amd64", family: "dos"
>>>>>>
>>>>>> Gary
>>>>>>
>>>>>> On Mon, Sep 5, 2016 at 5:32 PM, Ralph Goers <
>>>>>> ralph.goers@dslextreme.com> wrote:
>>>>>>
>>>>>>> And you are building with Java 7?
>>>>>>>
>>>>>>> Ralph
>>>>>>>
>>>>>>> On Sep 5, 2016, at 2:18 PM, Gary Gregory <ga...@gmail.com>
>>>>>>> wrote:
>>>>>>>
>>>>>>> Locally, I get:
>>>>>>>
>>>>>>> Failed tests:
>>>>>>>   RoutingAppenderWithPurgingTest.routingTest:91 Incorrect number of
>>>>>>> appenders with IdlePurgePolicy. expected:<3> but was:<1>
>>>>>>>
>>>>>>> Gary
>>>>>>>
>>>>>>> On Mon, Sep 5, 2016 at 12:54 PM, Ralph Goers <
>>>>>>> ralph.goers@dslextreme.com> wrote:
>>>>>>>
>>>>>>>> For the record, I am voting -1 on this commit.  It breaks the build
>>>>>>>> because the DisruptorBlockingQueueFactory has a dependency that requires
>>>>>>>> Java 8. The 2.7 release is blocked until this is corrected.
>>>>>>>>
>>>>>>>> Ralph
>>>>>>>>
>>>>>>>> > On Sep 4, 2016, at 11:38 AM, mattsicker@apache.org wrote:
>>>>>>>> >
>>>>>>>> > Convert BlockingQueueFactory into a plugin element
>>>>>>>> >
>>>>>>>> > Related to LOG4J2-1430.
>>>>>>>> >
>>>>>>>> >
>>>>>>>> > Project: http://git-wip-us.apache.org/r
>>>>>>>> epos/asf/logging-log4j2/repo
>>>>>>>> > Commit: http://git-wip-us.apache.org/r
>>>>>>>> epos/asf/logging-log4j2/commit/65ec9bce
>>>>>>>> > Tree: http://git-wip-us.apache.org/r
>>>>>>>> epos/asf/logging-log4j2/tree/65ec9bce
>>>>>>>> > Diff: http://git-wip-us.apache.org/r
>>>>>>>> epos/asf/logging-log4j2/diff/65ec9bce
>>>>>>>> >
>>>>>>>> > Branch: refs/heads/master
>>>>>>>> > Commit: 65ec9bcef74dc30ecab9c2091c6e0638d53490d8
>>>>>>>> > Parents: 0848d7a
>>>>>>>> > Author: Matt Sicker <bo...@gmail.com>
>>>>>>>> > Authored: Fri Jun 17 18:51:08 2016 -0500
>>>>>>>> > Committer: Matt Sicker <bo...@gmail.com>
>>>>>>>> > Committed: Fri Jun 17 18:51:08 2016 -0500
>>>>>>>> >
>>>>>>>> > ------------------------------------------------------------
>>>>>>>> ----------
>>>>>>>> > .../log4j/core/appender/AsyncAppender.java      | 24 +++++++++---
>>>>>>>> > .../core/async/ArrayBlockingQueueFactory.java   | 10 +++++
>>>>>>>> > .../log4j/core/async/BlockingQueueFactory.java  | 13 ++++++-
>>>>>>>> > .../async/DisruptorBlockingQueueFactory.java    | 11 +++++-
>>>>>>>> > .../core/async/LinkedTransferQueueFactory.java  | 10 +++++
>>>>>>>> > .../log4j/core/appender/AsyncAppenderTest.java  | 16 ++++----
>>>>>>>> > .../BlockingQueueFactory-ArrayBlockingQueue.xml | 40
>>>>>>>> ++++++++++++++++++++
>>>>>>>> > ...ckingQueueFactory-DisruptorBlockingQueue.xml | 40
>>>>>>>> ++++++++++++++++++++
>>>>>>>> > ...BlockingQueueFactory-LinkedTransferQueue.xml | 40
>>>>>>>> ++++++++++++++++++++
>>>>>>>> > 9 files changed, 189 insertions(+), 15 deletions(-)
>>>>>>>> > ------------------------------------------------------------
>>>>>>>> ----------
>>>>>>>> >
>>>>>>>> >
>>>>>>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>>>>>>> 5ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/co
>>>>>>>> re/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/app
>>>>>>>> ender/AsyncAppender.java
>>>>>>>> > index 3c9c37c..dee5e50 100644
>>>>>>>> > --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/app
>>>>>>>> ender/AsyncAppender.java
>>>>>>>> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/app
>>>>>>>> ender/AsyncAppender.java
>>>>>>>> > @@ -26,8 +26,11 @@ 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;
>>>>>>>> > +import org.apache.logging.log4j.core.
>>>>>>>> async.ArrayBlockingQueueFactory;
>>>>>>>> > import org.apache.logging.log4j.core.async.AsyncQueueFullPolicy;
>>>>>>>> > import org.apache.logging.log4j.core.
>>>>>>>> async.AsyncQueueFullPolicyFactory;
>>>>>>>> > +import org.apache.logging.log4j.core.async.BlockingQueueFactory;
>>>>>>>> > +import org.apache.logging.log4j.core.
>>>>>>>> async.BlockingQueueFactoryUtil;
>>>>>>>> > import org.apache.logging.log4j.core.
>>>>>>>> async.DiscardingAsyncQueueFullPolicy;
>>>>>>>> > import org.apache.logging.log4j.core.async.EventRoute;
>>>>>>>> > import org.apache.logging.log4j.core.config.AppenderControl;
>>>>>>>> > @@ -42,7 +45,6 @@ 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.validation.constraints.Required;
>>>>>>>> > import org.apache.logging.log4j.core.impl.Log4jLogEvent;
>>>>>>>> > -import org.apache.logging.log4j.core.
>>>>>>>> async.BlockingQueueFactoryUtil;
>>>>>>>> > import org.apache.logging.log4j.core.util.Constants;
>>>>>>>> >
>>>>>>>> > /**
>>>>>>>> > @@ -73,8 +75,8 @@ public final class AsyncAppender extends
>>>>>>>> AbstractAppender {
>>>>>>>> >
>>>>>>>> >     private AsyncAppender(final String name, final Filter filter,
>>>>>>>> final AppenderRef[] appenderRefs,
>>>>>>>> >                           final String errorRef, final int
>>>>>>>> queueSize, final boolean blocking,
>>>>>>>> > -                          final boolean ignoreExceptions,
>>>>>>>> > -                          final long shutdownTimeout, final
>>>>>>>> Configuration config, final boolean includeLocation) {
>>>>>>>> > +                          final boolean ignoreExceptions, final
>>>>>>>> long shutdownTimeout, final Configuration config,
>>>>>>>> > +                          final boolean includeLocation, final
>>>>>>>> BlockingQueueFactory<LogEvent> blockingQueueFactory) {
>>>>>>>> >         super(name, filter, null, ignoreExceptions);
>>>>>>>> >         this.queue = BlockingQueueFactoryUtil.<LogE
>>>>>>>> vent>getBlockingQueueFactory().create(queueSize);
>>>>>>>> >         this.queueSize = queueSize;
>>>>>>>> > @@ -217,7 +219,9 @@ public final class AsyncAppender extends
>>>>>>>> AbstractAppender {
>>>>>>>> >     }
>>>>>>>> >
>>>>>>>> >     /**
>>>>>>>> > -     * Create an AsyncAppender.
>>>>>>>> > +     * Create an AsyncAppender. This method is retained for
>>>>>>>> backwards compatibility. New code should use the
>>>>>>>> > +     * {@link Builder} instead. This factory will use {@link
>>>>>>>> ArrayBlockingQueueFactory} by default as was the behavior
>>>>>>>> > +     * pre-2.7.
>>>>>>>> >      *
>>>>>>>> >      * @param appenderRefs     The Appenders to reference.
>>>>>>>> >      * @param errorRef         An optional Appender to write to
>>>>>>>> if the queue is full or other errors occur.
>>>>>>>> > @@ -247,7 +251,7 @@ public final class AsyncAppender extends
>>>>>>>> AbstractAppender {
>>>>>>>> >         }
>>>>>>>> >
>>>>>>>> >         return new AsyncAppender(name, filter, appenderRefs,
>>>>>>>> errorRef, size, blocking, ignoreExceptions,
>>>>>>>> > -            shutdownTimeout, config, includeLocation);
>>>>>>>> > +            shutdownTimeout, config, includeLocation, new
>>>>>>>> ArrayBlockingQueueFactory<LogEvent>());
>>>>>>>> >     }
>>>>>>>> >
>>>>>>>> >     @PluginBuilderFactory
>>>>>>>> > @@ -290,6 +294,9 @@ public final class AsyncAppender extends
>>>>>>>> AbstractAppender {
>>>>>>>> >         @PluginBuilderAttribute
>>>>>>>> >         private boolean ignoreExceptions = true;
>>>>>>>> >
>>>>>>>> > +        @PluginElement(BlockingQueueFactory.ELEMENT_TYPE)
>>>>>>>> > +        private BlockingQueueFactory<LogEvent>
>>>>>>>> blockingQueueFactory = new ArrayBlockingQueueFactory<>();
>>>>>>>> > +
>>>>>>>> >         public Builder setAppenderRefs(AppenderRef[]
>>>>>>>> appenderRefs) {
>>>>>>>> >             this.appenderRefs = appenderRefs;
>>>>>>>> >             return this;
>>>>>>>> > @@ -340,10 +347,15 @@ public final class AsyncAppender extends
>>>>>>>> AbstractAppender {
>>>>>>>> >             return this;
>>>>>>>> >         }
>>>>>>>> >
>>>>>>>> > +        public Builder setBlockingQueueFactory(final
>>>>>>>> BlockingQueueFactory<LogEvent> blockingQueueFactory) {
>>>>>>>> > +            this.blockingQueueFactory = blockingQueueFactory;
>>>>>>>> > +            return this;
>>>>>>>> > +        }
>>>>>>>> > +
>>>>>>>> >         @Override
>>>>>>>> >         public AsyncAppender build() {
>>>>>>>> >             return new AsyncAppender(name, filter, appenderRefs,
>>>>>>>> errorRef, bufferSize, blocking, ignoreExceptions,
>>>>>>>> > -                shutdownTimeout, configuration, includeLocation);
>>>>>>>> > +                shutdownTimeout, configuration, includeLocation,
>>>>>>>> blockingQueueFactory);
>>>>>>>> >         }
>>>>>>>> >     }
>>>>>>>> >
>>>>>>>> >
>>>>>>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>>>>>>> 5ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/co
>>>>>>>> re/async/ArrayBlockingQueueFactory.java
>>>>>>>> > ------------------------------------------------------------
>>>>>>>> ----------
>>>>>>>> > diff --git a/log4j-core/src/main/java/org
>>>>>>>> /apache/logging/log4j/core/async/ArrayBlockingQueueFactory.java
>>>>>>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>>>>> nc/ArrayBlockingQueueFactory.java
>>>>>>>> > index e9c99b8..dcad78a 100644
>>>>>>>> > --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>>>>> nc/ArrayBlockingQueueFactory.java
>>>>>>>> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>>>>> nc/ArrayBlockingQueueFactory.java
>>>>>>>> > @@ -3,14 +3,24 @@ package org.apache.logging.log4j.core.async;
>>>>>>>> > import java.util.concurrent.ArrayBlockingQueue;
>>>>>>>> > import java.util.concurrent.BlockingQueue;
>>>>>>>> >
>>>>>>>> > +import org.apache.logging.log4j.core.config.Node;
>>>>>>>> > +import org.apache.logging.log4j.core.config.plugins.Plugin;
>>>>>>>> > +import org.apache.logging.log4j.core.
>>>>>>>> config.plugins.PluginFactory;
>>>>>>>> > +
>>>>>>>> > /**
>>>>>>>> >  * Factory for creating instances of {@link ArrayBlockingQueue}.
>>>>>>>> >  *
>>>>>>>> >  * @since 2.7
>>>>>>>> >  */
>>>>>>>> > +@Plugin(name = "ArrayBlockingQueue", category = Node.CATEGORY,
>>>>>>>> elementType = BlockingQueueFactory.ELEMENT_TYPE)
>>>>>>>> > public class ArrayBlockingQueueFactory<E> implements
>>>>>>>> BlockingQueueFactory<E> {
>>>>>>>> >     @Override
>>>>>>>> >     public BlockingQueue<E> create(int capacity) {
>>>>>>>> >         return new ArrayBlockingQueue<>(capacity);
>>>>>>>> >     }
>>>>>>>> > +
>>>>>>>> > +    @PluginFactory
>>>>>>>> > +    public static <E> ArrayBlockingQueueFactory<E>
>>>>>>>> createFactory() {
>>>>>>>> > +        return new ArrayBlockingQueueFactory<>();
>>>>>>>> > +    }
>>>>>>>> > }
>>>>>>>> >
>>>>>>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>>>>>>> 5ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/co
>>>>>>>> re/async/BlockingQueueFactory.java
>>>>>>>> > ------------------------------------------------------------
>>>>>>>> ----------
>>>>>>>> > diff --git a/log4j-core/src/main/java/org
>>>>>>>> /apache/logging/log4j/core/async/BlockingQueueFactory.java
>>>>>>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>>>>> nc/BlockingQueueFactory.java
>>>>>>>> > index ccd1625..5763d1e 100644
>>>>>>>> > --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>>>>> nc/BlockingQueueFactory.java
>>>>>>>> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>>>>> nc/BlockingQueueFactory.java
>>>>>>>> > @@ -9,7 +9,18 @@ import java.util.concurrent.BlockingQueue;
>>>>>>>> >  */
>>>>>>>> > public interface BlockingQueueFactory<E> {
>>>>>>>> >
>>>>>>>> > -    String PROPERTY = "log4j.BlockingQueueFactory";
>>>>>>>> > +    /**
>>>>>>>> > +     * The {@link org.apache.logging.log4j.core.
>>>>>>>> config.plugins.Plugin#elementType() element type} to use for
>>>>>>>> plugins
>>>>>>>> > +     * implementing this interface.
>>>>>>>> > +     */
>>>>>>>> > +    String ELEMENT_TYPE = "BlockingQueueFactory";
>>>>>>>> >
>>>>>>>> > +    /**
>>>>>>>> > +     * Creates a new BlockingQueue with the specified maximum
>>>>>>>> capacity. Note that not all implementations of
>>>>>>>> > +     * BlockingQueue support a bounded capacity in which case
>>>>>>>> the value is ignored.
>>>>>>>> > +     *
>>>>>>>> > +     * @param capacity maximum size of the queue if supported
>>>>>>>> > +     * @return a new BlockingQueue
>>>>>>>> > +     */
>>>>>>>> >     BlockingQueue<E> create(int capacity);
>>>>>>>> > }
>>>>>>>> >
>>>>>>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>>>>>>> 5ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/co
>>>>>>>> re/async/DisruptorBlockingQueueFactory.java
>>>>>>>> > ------------------------------------------------------------
>>>>>>>> ----------
>>>>>>>> > diff --git a/log4j-core/src/main/java/org
>>>>>>>> /apache/logging/log4j/core/async/DisruptorBlockingQueueFactory.java
>>>>>>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>>>>> nc/DisruptorBlockingQueueFactory.java
>>>>>>>> > index 8fb3707..add375d 100644
>>>>>>>> > --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>>>>> nc/DisruptorBlockingQueueFactory.java
>>>>>>>> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>>>>> nc/DisruptorBlockingQueueFactory.java
>>>>>>>> > @@ -3,15 +3,24 @@ package org.apache.logging.log4j.core.async;
>>>>>>>> > import java.util.concurrent.BlockingQueue;
>>>>>>>> >
>>>>>>>> > import com.conversantmedia.util.concu
>>>>>>>> rrent.DisruptorBlockingQueue;
>>>>>>>> > +import org.apache.logging.log4j.core.config.Node;
>>>>>>>> > +import org.apache.logging.log4j.core.config.plugins.Plugin;
>>>>>>>> > +import org.apache.logging.log4j.core.
>>>>>>>> config.plugins.PluginFactory;
>>>>>>>> >
>>>>>>>> > /**
>>>>>>>> >  * Factory for creating instances of {@link
>>>>>>>> DisruptorBlockingQueue}.
>>>>>>>> >  *
>>>>>>>> >  * @since 2.7
>>>>>>>> >  */
>>>>>>>> > +@Plugin(name = "DisruptorBlockingQueue", category =
>>>>>>>> Node.CATEGORY, elementType = BlockingQueueFactory.ELEMENT_TYPE)
>>>>>>>> > public class DisruptorBlockingQueueFactory<E> implements
>>>>>>>> BlockingQueueFactory<E> {
>>>>>>>> >     @Override
>>>>>>>> >     public BlockingQueue<E> create(int capacity) {
>>>>>>>> > -        return new DisruptorBlockingQueue<E>(capacity);
>>>>>>>> > +        return new DisruptorBlockingQueue<>(capacity);
>>>>>>>> > +    }
>>>>>>>> > +
>>>>>>>> > +    @PluginFactory
>>>>>>>> > +    public static <E> DisruptorBlockingQueueFactory<E>
>>>>>>>> createFactory() {
>>>>>>>> > +        return new DisruptorBlockingQueueFactory<>();
>>>>>>>> >     }
>>>>>>>> > }
>>>>>>>> >
>>>>>>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>>>>>>> 5ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/co
>>>>>>>> re/async/LinkedTransferQueueFactory.java
>>>>>>>> > ------------------------------------------------------------
>>>>>>>> ----------
>>>>>>>> > diff --git a/log4j-core/src/main/java/org
>>>>>>>> /apache/logging/log4j/core/async/LinkedTransferQueueFactory.java
>>>>>>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>>>>> nc/LinkedTransferQueueFactory.java
>>>>>>>> > index 862fab3..6ab24e7 100644
>>>>>>>> > --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>>>>> nc/LinkedTransferQueueFactory.java
>>>>>>>> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>>>>> nc/LinkedTransferQueueFactory.java
>>>>>>>> > @@ -20,14 +20,24 @@ package org.apache.logging.log4j.core.async;
>>>>>>>> > import java.util.concurrent.BlockingQueue;
>>>>>>>> > import java.util.concurrent.LinkedTransferQueue;
>>>>>>>> >
>>>>>>>> > +import org.apache.logging.log4j.core.config.Node;
>>>>>>>> > +import org.apache.logging.log4j.core.config.plugins.Plugin;
>>>>>>>> > +import org.apache.logging.log4j.core.
>>>>>>>> config.plugins.PluginFactory;
>>>>>>>> > +
>>>>>>>> > /**
>>>>>>>> >  * Factory for creating instances of {@link LinkedTransferQueue}.
>>>>>>>> >  *
>>>>>>>> >  * @since 2.7
>>>>>>>> >  */
>>>>>>>> > +@Plugin(name = "LinkedTransferQueue", category = Node.CATEGORY,
>>>>>>>> elementType = BlockingQueueFactory.ELEMENT_TYPE)
>>>>>>>> > public class LinkedTransferQueueFactory<E> implements
>>>>>>>> BlockingQueueFactory<E> {
>>>>>>>> >     @Override
>>>>>>>> >     public BlockingQueue<E> create(int capacity) {
>>>>>>>> >         return new LinkedTransferQueue<>();
>>>>>>>> >     }
>>>>>>>> > +
>>>>>>>> > +    @PluginFactory
>>>>>>>> > +    public static <E> LinkedTransferQueueFactory<E>
>>>>>>>> createFactory() {
>>>>>>>> > +        return new LinkedTransferQueueFactory<>();
>>>>>>>> > +    }
>>>>>>>> > }
>>>>>>>> >
>>>>>>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>>>>>>> 5ec9bce/log4j-core/src/test/java/org/apache/logging/log4j/co
>>>>>>>> re/appender/AsyncAppenderTest.java
>>>>>>>> > ------------------------------------------------------------
>>>>>>>> ----------
>>>>>>>> > diff --git a/log4j-core/src/test/java/org
>>>>>>>> /apache/logging/log4j/core/appender/AsyncAppenderTest.java
>>>>>>>> b/log4j-core/src/test/java/org/apache/logging/log4j/core/app
>>>>>>>> ender/AsyncAppenderTest.java
>>>>>>>> > index 3066f38..076fdd0 100644
>>>>>>>> > --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/app
>>>>>>>> ender/AsyncAppenderTest.java
>>>>>>>> > +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/app
>>>>>>>> ender/AsyncAppenderTest.java
>>>>>>>> > @@ -41,19 +41,21 @@ import static org.junit.Assert.*;
>>>>>>>> >  */
>>>>>>>> > @RunWith(Parameterized.class)
>>>>>>>> > public class AsyncAppenderTest {
>>>>>>>> > -    private static final String CONFIG = "log4j-asynch.xml";
>>>>>>>> >
>>>>>>>> >     @Parameterized.Parameters
>>>>>>>> >     public static Object[] data() {
>>>>>>>> > -        return new Class<?>[]{
>>>>>>>> > -            ArrayBlockingQueueFactory.class,
>>>>>>>> > -            DisruptorBlockingQueueFactory.class,
>>>>>>>> > -            LinkedTransferQueueFactory.class
>>>>>>>> > +        return new String[]{
>>>>>>>> > +            // default async config uses array blocking queue
>>>>>>>> > +            "log4j-asynch.xml",
>>>>>>>> > +            // override default blocking queue implementations
>>>>>>>> > +            "BlockingQueueFactory-ArrayBlockingQueue.xml",
>>>>>>>> > +            "BlockingQueueFactory-DisruptorBlockingQueue.xml",
>>>>>>>> > +            "BlockingQueueFactory-LinkedTransferQueue.xml"
>>>>>>>> >         };
>>>>>>>> >     }
>>>>>>>> >
>>>>>>>> > -    public AsyncAppenderTest(final Class<? extends
>>>>>>>> BlockingQueueFactory> factory) {
>>>>>>>> > -        context = new LoggerContextRule(CONFIG).with
>>>>>>>> SystemProperty(BlockingQueueFactory.PROPERTY, factory.getName());
>>>>>>>> > +    public AsyncAppenderTest(final String configFileName) {
>>>>>>>> > +        context = new LoggerContextRule(configFileName);
>>>>>>>> >     }
>>>>>>>> >
>>>>>>>> >     @Rule
>>>>>>>> >
>>>>>>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>>>>>>> 5ec9bce/log4j-core/src/test/resources/BlockingQueueFactory-A
>>>>>>>> rrayBlockingQueue.xml
>>>>>>>> > ------------------------------------------------------------
>>>>>>>> ----------
>>>>>>>> > diff --git a/log4j-core/src/test/resource
>>>>>>>> s/BlockingQueueFactory-ArrayBlockingQueue.xml
>>>>>>>> b/log4j-core/src/test/resources/BlockingQueueFactory-ArrayBl
>>>>>>>> ockingQueue.xml
>>>>>>>> > new file mode 100644
>>>>>>>> > index 0000000..e8bbfa6
>>>>>>>> > --- /dev/null
>>>>>>>> > +++ b/log4j-core/src/test/resources/BlockingQueueFactory-ArrayBl
>>>>>>>> ockingQueue.xml
>>>>>>>> > @@ -0,0 +1,40 @@
>>>>>>>> > +<?xml version="1.0" encoding="UTF-8"?>
>>>>>>>> > +<!--
>>>>>>>> > + Licensed to the Apache Software Foundation (ASF) under one or
>>>>>>>> more
>>>>>>>> > + contributor license agreements.  See the NOTICE file
>>>>>>>> distributed with
>>>>>>>> > + this work for additional information regarding copyright
>>>>>>>> ownership.
>>>>>>>> > + The ASF licenses this file to You under the Apache License,
>>>>>>>> Version 2.0
>>>>>>>> > + (the "License"); you may not use this file except in compliance
>>>>>>>> with
>>>>>>>> > + the License.  You may obtain a copy of the License at
>>>>>>>> > +
>>>>>>>> > +      http://www.apache.org/licenses/LICENSE-2.0
>>>>>>>> > +
>>>>>>>> > + Unless required by applicable law or agreed to in writing,
>>>>>>>> software
>>>>>>>> > + distributed under the License is distributed on an "AS IS"
>>>>>>>> BASIS,
>>>>>>>> > + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>>>>>>>> implied.
>>>>>>>> > + See the License for the specific language governing permissions
>>>>>>>> and
>>>>>>>> > + limitations under the License.
>>>>>>>> > +
>>>>>>>> > +-->
>>>>>>>> > +<Configuration status="OFF" name="ArrayBlockingQueueFactory">
>>>>>>>> > +
>>>>>>>> > +  <Appenders>
>>>>>>>> > +    <Console name="STDOUT">
>>>>>>>> > +      <PatternLayout pattern="%m%n"/>
>>>>>>>> > +    </Console>
>>>>>>>> > +    <List name="List">
>>>>>>>> > +      <PatternLayout pattern="%C %M %m"/>
>>>>>>>> > +    </List>
>>>>>>>> > +    <Async name="Async" includeLocation="true"
>>>>>>>> error-ref="STDOUT">
>>>>>>>> > +      <AppenderRef ref="List"/>
>>>>>>>> > +      <ArrayBlockingQueue/>
>>>>>>>> > +    </Async>
>>>>>>>> > +  </Appenders>
>>>>>>>> > +
>>>>>>>> > +  <Loggers>
>>>>>>>> > +    <Root level="debug">
>>>>>>>> > +      <AppenderRef ref="Async"/>
>>>>>>>> > +    </Root>
>>>>>>>> > +  </Loggers>
>>>>>>>> > +
>>>>>>>> > +</Configuration>
>>>>>>>> > \ No newline at end of file
>>>>>>>> >
>>>>>>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>>>>>>> 5ec9bce/log4j-core/src/test/resources/BlockingQueueFactory-D
>>>>>>>> isruptorBlockingQueue.xml
>>>>>>>> > ------------------------------------------------------------
>>>>>>>> ----------
>>>>>>>> > diff --git a/log4j-core/src/test/resource
>>>>>>>> s/BlockingQueueFactory-DisruptorBlockingQueue.xml
>>>>>>>> b/log4j-core/src/test/resources/BlockingQueueFactory-Disrupt
>>>>>>>> orBlockingQueue.xml
>>>>>>>> > new file mode 100644
>>>>>>>> > index 0000000..268cca7
>>>>>>>> > --- /dev/null
>>>>>>>> > +++ b/log4j-core/src/test/resources/BlockingQueueFactory-Disrupt
>>>>>>>> orBlockingQueue.xml
>>>>>>>> > @@ -0,0 +1,40 @@
>>>>>>>> > +<?xml version="1.0" encoding="UTF-8"?>
>>>>>>>> > +<!--
>>>>>>>> > + Licensed to the Apache Software Foundation (ASF) under one or
>>>>>>>> more
>>>>>>>> > + contributor license agreements.  See the NOTICE file
>>>>>>>> distributed with
>>>>>>>> > + this work for additional information regarding copyright
>>>>>>>> ownership.
>>>>>>>> > + The ASF licenses this file to You under the Apache License,
>>>>>>>> Version 2.0
>>>>>>>> > + (the "License"); you may not use this file except in compliance
>>>>>>>> with
>>>>>>>> > + the License.  You may obtain a copy of the License at
>>>>>>>> > +
>>>>>>>> > +      http://www.apache.org/licenses/LICENSE-2.0
>>>>>>>> > +
>>>>>>>> > + Unless required by applicable law or agreed to in writing,
>>>>>>>> software
>>>>>>>> > + distributed under the License is distributed on an "AS IS"
>>>>>>>> BASIS,
>>>>>>>> > + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>>>>>>>> implied.
>>>>>>>> > + See the License for the specific language governing permissions
>>>>>>>> and
>>>>>>>> > + limitations under the License.
>>>>>>>> > +
>>>>>>>> > +-->
>>>>>>>> > +<Configuration status="OFF" name="DisruptorBlockingQueueFa
>>>>>>>> ctory">
>>>>>>>> > +
>>>>>>>> > +  <Appenders>
>>>>>>>> > +    <Console name="STDOUT">
>>>>>>>> > +      <PatternLayout pattern="%m%n"/>
>>>>>>>> > +    </Console>
>>>>>>>> > +    <List name="List">
>>>>>>>> > +      <PatternLayout pattern="%C %M %m"/>
>>>>>>>> > +    </List>
>>>>>>>> > +    <Async name="Async" includeLocation="true"
>>>>>>>> error-ref="STDOUT">
>>>>>>>> > +      <AppenderRef ref="List"/>
>>>>>>>> > +      <DisruptorBlockingQueue/>
>>>>>>>> > +    </Async>
>>>>>>>> > +  </Appenders>
>>>>>>>> > +
>>>>>>>> > +  <Loggers>
>>>>>>>> > +    <Root level="debug">
>>>>>>>> > +      <AppenderRef ref="Async"/>
>>>>>>>> > +    </Root>
>>>>>>>> > +  </Loggers>
>>>>>>>> > +
>>>>>>>> > +</Configuration>
>>>>>>>> > \ No newline at end of file
>>>>>>>> >
>>>>>>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>>>>>>> 5ec9bce/log4j-core/src/test/resources/BlockingQueueFactory-L
>>>>>>>> inkedTransferQueue.xml
>>>>>>>> > ------------------------------------------------------------
>>>>>>>> ----------
>>>>>>>> > diff --git a/log4j-core/src/test/resource
>>>>>>>> s/BlockingQueueFactory-LinkedTransferQueue.xml
>>>>>>>> b/log4j-core/src/test/resources/BlockingQueueFactory-LinkedT
>>>>>>>> ransferQueue.xml
>>>>>>>> > new file mode 100644
>>>>>>>> > index 0000000..13063d3
>>>>>>>> > --- /dev/null
>>>>>>>> > +++ b/log4j-core/src/test/resources/BlockingQueueFactory-LinkedT
>>>>>>>> ransferQueue.xml
>>>>>>>> > @@ -0,0 +1,40 @@
>>>>>>>> > +<?xml version="1.0" encoding="UTF-8"?>
>>>>>>>> > +<!--
>>>>>>>> > + Licensed to the Apache Software Foundation (ASF) under one or
>>>>>>>> more
>>>>>>>> > + contributor license agreements.  See the NOTICE file
>>>>>>>> distributed with
>>>>>>>> > + this work for additional information regarding copyright
>>>>>>>> ownership.
>>>>>>>> > + The ASF licenses this file to You under the Apache License,
>>>>>>>> Version 2.0
>>>>>>>> > + (the "License"); you may not use this file except in compliance
>>>>>>>> with
>>>>>>>> > + the License.  You may obtain a copy of the License at
>>>>>>>> > +
>>>>>>>> > +      http://www.apache.org/licenses/LICENSE-2.0
>>>>>>>> > +
>>>>>>>> > + Unless required by applicable law or agreed to in writing,
>>>>>>>> software
>>>>>>>> > + distributed under the License is distributed on an "AS IS"
>>>>>>>> BASIS,
>>>>>>>> > + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>>>>>>>> implied.
>>>>>>>> > + See the License for the specific language governing permissions
>>>>>>>> and
>>>>>>>> > + limitations under the License.
>>>>>>>> > +
>>>>>>>> > +-->
>>>>>>>> > +<Configuration status="OFF" name="LinkedTransferQueueFactory">
>>>>>>>> > +
>>>>>>>> > +  <Appenders>
>>>>>>>> > +    <Console name="STDOUT">
>>>>>>>> > +      <PatternLayout pattern="%m%n"/>
>>>>>>>> > +    </Console>
>>>>>>>> > +    <List name="List">
>>>>>>>> > +      <PatternLayout pattern="%C %M %m"/>
>>>>>>>> > +    </List>
>>>>>>>> > +    <Async name="Async" includeLocation="true"
>>>>>>>> error-ref="STDOUT">
>>>>>>>> > +      <AppenderRef ref="List"/>
>>>>>>>> > +      <LinkedTransferQueue/>
>>>>>>>> > +    </Async>
>>>>>>>> > +  </Appenders>
>>>>>>>> > +
>>>>>>>> > +  <Loggers>
>>>>>>>> > +    <Root level="debug">
>>>>>>>> > +      <AppenderRef ref="Async"/>
>>>>>>>> > +    </Root>
>>>>>>>> > +  </Loggers>
>>>>>>>> > +
>>>>>>>> > +</Configuration>
>>>>>>>> > \ No newline at end of file
>>>>>>>> >
>>>>>>>> >
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> ------------------------------------------------------------
>>>>>>>> ---------
>>>>>>>> To unsubscribe, e-mail: log4j-dev-unsubscribe@logging.apache.org
>>>>>>>> For additional commands, e-mail: log4j-dev-help@logging.apache.org
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> 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
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> 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
>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Matt Sicker <bo...@gmail.com>
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> Matt Sicker <bo...@gmail.com>
>>>>
>>>
>>>
>>
>>
>> --
>> Matt Sicker <bo...@gmail.com>
>>
>
>
>
> --
> Matt Sicker <bo...@gmail.com>
>
>
>


-- 
Matt Sicker <bo...@gmail.com>

Re: [13/36] logging-log4j2 git commit: Convert BlockingQueueFactory into a plugin element

Posted by Ralph Goers <ra...@dslextreme.com>.
I only run the release build using the compiler for the target release.  All the target option really does is set the release version to the correct value and verify you aren’t using language constructs from the newer java version. Using Java 8 with a target of Java 7 runs the risk that you still might be dependent on Java 8 library methods and not know about it.

So whatever solution you come up with needs to work when running the build with Java 7.

Ralph




> On Sep 6, 2016, at 9:23 AM, Matt Sicker <bo...@gmail.com> wrote:
> 
> By that I mean they set their compiler version to 1.6 for src/main/ and 1.8 for src/test/ which shouldn't affect us as we're not using their test artifact.
> 
> On 6 September 2016 at 11:22, Matt Sicker <boards@gmail.com <ma...@gmail.com>> wrote:
> JCTools requires 1.6 for the build and 1.8 for the test. It appears we could do the same if the only thing failing the build is a unit test, but if the whole build is failing on Java 7, then I can back out those changes into a separate branch for future inclusion.
> 
> On 6 September 2016 at 11:18, Remko Popma <remko.popma@gmail.com <ma...@gmail.com>> wrote:
> Does JCTools require Java 8? One option is for this release to leave out the Conversant library and only include JCTools and the TransferQueue. 
> 
> On Wed, Sep 7, 2016 at 1:06 AM, Matt Sicker <boards@gmail.com <ma...@gmail.com>> wrote:
> I can't believe I didn't notice it, but the Conversant library does require Java 8. It's an optional dependency, so what to do? We can build on Java 8 with a target for Java 7 and use the animal-sniffer Maven plugin to make sure we don't accidentally use anything from Java 8.
> 
> On 5 September 2016 at 22:45, Matt Sicker <boards@gmail.com <ma...@gmail.com>> wrote:
> It looks like I may have merged prematurely then. I think I've been running builds using Java 8 as well and didn't notice this. Jenkins isn't even loading for me, so I can't see what the problem is on there. I'll take a look at this tomorrow, and if I can't fix the dependency issue, I'll back out part of this feature for now.
> 
> On 5 September 2016 at 17:03, Ralph Goers <ralph.goers@dslextreme.com <ma...@dslextreme.com>> wrote:
> Jenkins and the release builds use Java 7, so you should certainly use Java 7 from time to time.
> 
> Ralph
> 
>> On Sep 5, 2016, at 2:33 PM, Gary Gregory <garydgregory@gmail.com <ma...@gmail.com>> wrote:
>> 
>> Ah, no, Java 8:
>> 
>> Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-10T08:41:47-08:00)
>> Maven home: E:\Java\apache-maven-3.3.9
>> Java version: 1.8.0_101, vendor: Oracle Corporation
>> Java home: C:\Program Files\Java\jdk1.8.0_101\jre
>> Default locale: en_US, platform encoding: Cp1252
>> OS name: "windows 7", version: "6.1", arch: "amd64", family: "dos"
>> 
>> Gary
>> 
>> On Mon, Sep 5, 2016 at 5:32 PM, Ralph Goers <ralph.goers@dslextreme.com <ma...@dslextreme.com>> wrote:
>> And you are building with Java 7?
>> 
>> Ralph
>> 
>>> On Sep 5, 2016, at 2:18 PM, Gary Gregory <garydgregory@gmail.com <ma...@gmail.com>> wrote:
>>> 
>>> Locally, I get:
>>> 
>>> Failed tests:
>>>   RoutingAppenderWithPurgingTest.routingTest:91 Incorrect number of appenders with IdlePurgePolicy. expected:<3> but was:<1>
>>> 
>>> Gary
>>> 
>>> On Mon, Sep 5, 2016 at 12:54 PM, Ralph Goers <ralph.goers@dslextreme.com <ma...@dslextreme.com>> wrote:
>>> For the record, I am voting -1 on this commit.  It breaks the build because the DisruptorBlockingQueueFactory has a dependency that requires Java 8. The 2.7 release is blocked until this is corrected.
>>> 
>>> Ralph
>>> 
>>> > On Sep 4, 2016, at 11:38 AM, mattsicker@apache.org <ma...@apache.org> wrote:
>>> >
>>> > Convert BlockingQueueFactory into a plugin element
>>> >
>>> > Related to LOG4J2-1430.
>>> >
>>> >
>>> > Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo <http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo>
>>> > Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/65ec9bce <http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/65ec9bce>
>>> > Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/65ec9bce <http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/65ec9bce>
>>> > Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/65ec9bce <http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/65ec9bce>
>>> >
>>> > Branch: refs/heads/master
>>> > Commit: 65ec9bcef74dc30ecab9c2091c6e0638d53490d8
>>> > Parents: 0848d7a
>>> > Author: Matt Sicker <boards@gmail.com <ma...@gmail.com>>
>>> > Authored: Fri Jun 17 18:51:08 2016 -0500
>>> > Committer: Matt Sicker <boards@gmail.com <ma...@gmail.com>>
>>> > Committed: Fri Jun 17 18:51:08 2016 -0500
>>> >
>>> > ----------------------------------------------------------------------
>>> > .../log4j/core/appender/AsyncAppender.java      | 24 +++++++++---
>>> > .../core/async/ArrayBlockingQueueFactory.java   | 10 +++++
>>> > .../log4j/core/async/BlockingQueueFactory.java  | 13 ++++++-
>>> > .../async/DisruptorBlockingQueueFactory.java    | 11 +++++-
>>> > .../core/async/LinkedTransferQueueFactory.java  | 10 +++++
>>> > .../log4j/core/appender/AsyncAppenderTest.java  | 16 ++++----
>>> > .../BlockingQueueFactory-ArrayBlockingQueue.xml | 40 ++++++++++++++++++++
>>> > ...ckingQueueFactory-DisruptorBlockingQueue.xml | 40 ++++++++++++++++++++
>>> > ...BlockingQueueFactory-LinkedTransferQueue.xml | 40 ++++++++++++++++++++
>>> > 9 files changed, 189 insertions(+), 15 deletions(-)
>>> > ----------------------------------------------------------------------
>>> >
>>> >
>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/65ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AsyncAppender.java <http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/65ec9bce/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 3c9c37c..dee5e50 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
>>> > @@ -26,8 +26,11 @@ 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;
>>> > +import org.apache.logging.log4j.core.async.ArrayBlockingQueueFactory;
>>> > import org.apache.logging.log4j.core.async.AsyncQueueFullPolicy;
>>> > import org.apache.logging.log4j.core.async.AsyncQueueFullPolicyFactory;
>>> > +import org.apache.logging.log4j.core.async.BlockingQueueFactory;
>>> > +import org.apache.logging.log4j.core.async.BlockingQueueFactoryUtil;
>>> > import org.apache.logging.log4j.core.async.DiscardingAsyncQueueFullPolicy;
>>> > import org.apache.logging.log4j.core.async.EventRoute;
>>> > import org.apache.logging.log4j.core.config.AppenderControl;
>>> > @@ -42,7 +45,6 @@ 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.validation.constraints.Required;
>>> > import org.apache.logging.log4j.core.impl.Log4jLogEvent;
>>> > -import org.apache.logging.log4j.core.async.BlockingQueueFactoryUtil;
>>> > import org.apache.logging.log4j.core.util.Constants;
>>> >
>>> > /**
>>> > @@ -73,8 +75,8 @@ public final class AsyncAppender extends AbstractAppender {
>>> >
>>> >     private AsyncAppender(final String name, final Filter filter, final AppenderRef[] appenderRefs,
>>> >                           final String errorRef, final int queueSize, final boolean blocking,
>>> > -                          final boolean ignoreExceptions,
>>> > -                          final long shutdownTimeout, final Configuration config, final boolean includeLocation) {
>>> > +                          final boolean ignoreExceptions, final long shutdownTimeout, final Configuration config,
>>> > +                          final boolean includeLocation, final BlockingQueueFactory<LogEvent> blockingQueueFactory) {
>>> >         super(name, filter, null, ignoreExceptions);
>>> >         this.queue = BlockingQueueFactoryUtil.<LogEvent>getBlockingQueueFactory().create(queueSize);
>>> >         this.queueSize = queueSize;
>>> > @@ -217,7 +219,9 @@ public final class AsyncAppender extends AbstractAppender {
>>> >     }
>>> >
>>> >     /**
>>> > -     * Create an AsyncAppender.
>>> > +     * Create an AsyncAppender. This method is retained for backwards compatibility. New code should use the
>>> > +     * {@link Builder} instead. This factory will use {@link ArrayBlockingQueueFactory} by default as was the behavior
>>> > +     * pre-2.7.
>>> >      *
>>> >      * @param appenderRefs     The Appenders to reference.
>>> >      * @param errorRef         An optional Appender to write to if the queue is full or other errors occur.
>>> > @@ -247,7 +251,7 @@ public final class AsyncAppender extends AbstractAppender {
>>> >         }
>>> >
>>> >         return new AsyncAppender(name, filter, appenderRefs, errorRef, size, blocking, ignoreExceptions,
>>> > -            shutdownTimeout, config, includeLocation);
>>> > +            shutdownTimeout, config, includeLocation, new ArrayBlockingQueueFactory<LogEvent>());
>>> >     }
>>> >
>>> >     @PluginBuilderFactory
>>> > @@ -290,6 +294,9 @@ public final class AsyncAppender extends AbstractAppender {
>>> >         @PluginBuilderAttribute
>>> >         private boolean ignoreExceptions = true;
>>> >
>>> > +        @PluginElement(BlockingQueueFactory.ELEMENT_TYPE)
>>> > +        private BlockingQueueFactory<LogEvent> blockingQueueFactory = new ArrayBlockingQueueFactory<>();
>>> > +
>>> >         public Builder setAppenderRefs(AppenderRef[] appenderRefs) {
>>> >             this.appenderRefs = appenderRefs;
>>> >             return this;
>>> > @@ -340,10 +347,15 @@ public final class AsyncAppender extends AbstractAppender {
>>> >             return this;
>>> >         }
>>> >
>>> > +        public Builder setBlockingQueueFactory(final BlockingQueueFactory<LogEvent> blockingQueueFactory) {
>>> > +            this.blockingQueueFactory = blockingQueueFactory;
>>> > +            return this;
>>> > +        }
>>> > +
>>> >         @Override
>>> >         public AsyncAppender build() {
>>> >             return new AsyncAppender(name, filter, appenderRefs, errorRef, bufferSize, blocking, ignoreExceptions,
>>> > -                shutdownTimeout, configuration, includeLocation);
>>> > +                shutdownTimeout, configuration, includeLocation, blockingQueueFactory);
>>> >         }
>>> >     }
>>> >
>>> >
>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/65ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/core/async/ArrayBlockingQueueFactory.java <http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/65ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/core/async/ArrayBlockingQueueFactory.java>
>>> > ----------------------------------------------------------------------
>>> > diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/ArrayBlockingQueueFactory.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/ArrayBlockingQueueFactory.java
>>> > index e9c99b8..dcad78a 100644
>>> > --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/ArrayBlockingQueueFactory.java
>>> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/ArrayBlockingQueueFactory.java
>>> > @@ -3,14 +3,24 @@ package org.apache.logging.log4j.core.async;
>>> > import java.util.concurrent.ArrayBlockingQueue;
>>> > import java.util.concurrent.BlockingQueue;
>>> >
>>> > +import org.apache.logging.log4j.core.config.Node;
>>> > +import org.apache.logging.log4j.core.config.plugins.Plugin;
>>> > +import org.apache.logging.log4j.core.config.plugins.PluginFactory;
>>> > +
>>> > /**
>>> >  * Factory for creating instances of {@link ArrayBlockingQueue}.
>>> >  *
>>> >  * @since 2.7
>>> >  */
>>> > +@Plugin(name = "ArrayBlockingQueue", category = Node.CATEGORY, elementType = BlockingQueueFactory.ELEMENT_TYPE)
>>> > public class ArrayBlockingQueueFactory<E> implements BlockingQueueFactory<E> {
>>> >     @Override
>>> >     public BlockingQueue<E> create(int capacity) {
>>> >         return new ArrayBlockingQueue<>(capacity);
>>> >     }
>>> > +
>>> > +    @PluginFactory
>>> > +    public static <E> ArrayBlockingQueueFactory<E> createFactory() {
>>> > +        return new ArrayBlockingQueueFactory<>();
>>> > +    }
>>> > }
>>> >
>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/65ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/core/async/BlockingQueueFactory.java <http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/65ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/core/async/BlockingQueueFactory.java>
>>> > ----------------------------------------------------------------------
>>> > diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/BlockingQueueFactory.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/BlockingQueueFactory.java
>>> > index ccd1625..5763d1e 100644
>>> > --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/BlockingQueueFactory.java
>>> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/BlockingQueueFactory.java
>>> > @@ -9,7 +9,18 @@ import java.util.concurrent.BlockingQueue;
>>> >  */
>>> > public interface BlockingQueueFactory<E> {
>>> >
>>> > -    String PROPERTY = "log4j.BlockingQueueFactory";
>>> > +    /**
>>> > +     * The {@link org.apache.logging.log4j.core.config.plugins.Plugin#elementType() element type} to use for plugins
>>> > +     * implementing this interface.
>>> > +     */
>>> > +    String ELEMENT_TYPE = "BlockingQueueFactory";
>>> >
>>> > +    /**
>>> > +     * Creates a new BlockingQueue with the specified maximum capacity. Note that not all implementations of
>>> > +     * BlockingQueue support a bounded capacity in which case the value is ignored.
>>> > +     *
>>> > +     * @param capacity maximum size of the queue if supported
>>> > +     * @return a new BlockingQueue
>>> > +     */
>>> >     BlockingQueue<E> create(int capacity);
>>> > }
>>> >
>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/65ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/core/async/DisruptorBlockingQueueFactory.java <http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/65ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/core/async/DisruptorBlockingQueueFactory.java>
>>> > ----------------------------------------------------------------------
>>> > diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/DisruptorBlockingQueueFactory.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/DisruptorBlockingQueueFactory.java
>>> > index 8fb3707..add375d 100644
>>> > --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/DisruptorBlockingQueueFactory.java
>>> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/DisruptorBlockingQueueFactory.java
>>> > @@ -3,15 +3,24 @@ package org.apache.logging.log4j.core.async;
>>> > import java.util.concurrent.BlockingQueue;
>>> >
>>> > import com.conversantmedia.util.concurrent.DisruptorBlockingQueue;
>>> > +import org.apache.logging.log4j.core.config.Node;
>>> > +import org.apache.logging.log4j.core.config.plugins.Plugin;
>>> > +import org.apache.logging.log4j.core.config.plugins.PluginFactory;
>>> >
>>> > /**
>>> >  * Factory for creating instances of {@link DisruptorBlockingQueue}.
>>> >  *
>>> >  * @since 2.7
>>> >  */
>>> > +@Plugin(name = "DisruptorBlockingQueue", category = Node.CATEGORY, elementType = BlockingQueueFactory.ELEMENT_TYPE)
>>> > public class DisruptorBlockingQueueFactory<E> implements BlockingQueueFactory<E> {
>>> >     @Override
>>> >     public BlockingQueue<E> create(int capacity) {
>>> > -        return new DisruptorBlockingQueue<E>(capacity);
>>> > +        return new DisruptorBlockingQueue<>(capacity);
>>> > +    }
>>> > +
>>> > +    @PluginFactory
>>> > +    public static <E> DisruptorBlockingQueueFactory<E> createFactory() {
>>> > +        return new DisruptorBlockingQueueFactory<>();
>>> >     }
>>> > }
>>> >
>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/65ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/core/async/LinkedTransferQueueFactory.java <http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/65ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/core/async/LinkedTransferQueueFactory.java>
>>> > ----------------------------------------------------------------------
>>> > diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/LinkedTransferQueueFactory.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/LinkedTransferQueueFactory.java
>>> > index 862fab3..6ab24e7 100644
>>> > --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/LinkedTransferQueueFactory.java
>>> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/LinkedTransferQueueFactory.java
>>> > @@ -20,14 +20,24 @@ package org.apache.logging.log4j.core.async;
>>> > import java.util.concurrent.BlockingQueue;
>>> > import java.util.concurrent.LinkedTransferQueue;
>>> >
>>> > +import org.apache.logging.log4j.core.config.Node;
>>> > +import org.apache.logging.log4j.core.config.plugins.Plugin;
>>> > +import org.apache.logging.log4j.core.config.plugins.PluginFactory;
>>> > +
>>> > /**
>>> >  * Factory for creating instances of {@link LinkedTransferQueue}.
>>> >  *
>>> >  * @since 2.7
>>> >  */
>>> > +@Plugin(name = "LinkedTransferQueue", category = Node.CATEGORY, elementType = BlockingQueueFactory.ELEMENT_TYPE)
>>> > public class LinkedTransferQueueFactory<E> implements BlockingQueueFactory<E> {
>>> >     @Override
>>> >     public BlockingQueue<E> create(int capacity) {
>>> >         return new LinkedTransferQueue<>();
>>> >     }
>>> > +
>>> > +    @PluginFactory
>>> > +    public static <E> LinkedTransferQueueFactory<E> createFactory() {
>>> > +        return new LinkedTransferQueueFactory<>();
>>> > +    }
>>> > }
>>> >
>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/65ec9bce/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/AsyncAppenderTest.java <http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/65ec9bce/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/AsyncAppenderTest.java>
>>> > ----------------------------------------------------------------------
>>> > diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/AsyncAppenderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/AsyncAppenderTest.java
>>> > index 3066f38..076fdd0 100644
>>> > --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/AsyncAppenderTest.java
>>> > +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/AsyncAppenderTest.java
>>> > @@ -41,19 +41,21 @@ import static org.junit.Assert.*;
>>> >  */
>>> > @RunWith(Parameterized.class)
>>> > public class AsyncAppenderTest {
>>> > -    private static final String CONFIG = "log4j-asynch.xml";
>>> >
>>> >     @Parameterized.Parameters
>>> >     public static Object[] data() {
>>> > -        return new Class<?>[]{
>>> > -            ArrayBlockingQueueFactory.class,
>>> > -            DisruptorBlockingQueueFactory.class,
>>> > -            LinkedTransferQueueFactory.class
>>> > +        return new String[]{
>>> > +            // default async config uses array blocking queue
>>> > +            "log4j-asynch.xml",
>>> > +            // override default blocking queue implementations
>>> > +            "BlockingQueueFactory-ArrayBlockingQueue.xml",
>>> > +            "BlockingQueueFactory-DisruptorBlockingQueue.xml",
>>> > +            "BlockingQueueFactory-LinkedTransferQueue.xml"
>>> >         };
>>> >     }
>>> >
>>> > -    public AsyncAppenderTest(final Class<? extends BlockingQueueFactory> factory) {
>>> > -        context = new LoggerContextRule(CONFIG).withSystemProperty(BlockingQueueFactory.PROPERTY, factory.getName());
>>> > +    public AsyncAppenderTest(final String configFileName) {
>>> > +        context = new LoggerContextRule(configFileName);
>>> >     }
>>> >
>>> >     @Rule
>>> >
>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/65ec9bce/log4j-core/src/test/resources/BlockingQueueFactory-ArrayBlockingQueue.xml <http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/65ec9bce/log4j-core/src/test/resources/BlockingQueueFactory-ArrayBlockingQueue.xml>
>>> > ----------------------------------------------------------------------
>>> > diff --git a/log4j-core/src/test/resources/BlockingQueueFactory-ArrayBlockingQueue.xml b/log4j-core/src/test/resources/BlockingQueueFactory-ArrayBlockingQueue.xml
>>> > new file mode 100644
>>> > index 0000000..e8bbfa6
>>> > --- /dev/null
>>> > +++ b/log4j-core/src/test/resources/BlockingQueueFactory-ArrayBlockingQueue.xml
>>> > @@ -0,0 +1,40 @@
>>> > +<?xml version="1.0" encoding="UTF-8"?>
>>> > +<!--
>>> > + Licensed to the Apache Software Foundation (ASF) under one or more
>>> > + contributor license agreements.  See the NOTICE file distributed with
>>> > + this work for additional information regarding copyright ownership.
>>> > + The ASF licenses this file to You under the Apache License, Version 2.0
>>> > + (the "License"); you may not use this file except in compliance with
>>> > + the License.  You may obtain a copy of the License at
>>> > +
>>> > +      http://www.apache.org/licenses/LICENSE-2.0 <http://www.apache.org/licenses/LICENSE-2.0>
>>> > +
>>> > + Unless required by applicable law or agreed to in writing, software
>>> > + distributed under the License is distributed on an "AS IS" BASIS,
>>> > + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
>>> > + See the License for the specific language governing permissions and
>>> > + limitations under the License.
>>> > +
>>> > +-->
>>> > +<Configuration status="OFF" name="ArrayBlockingQueueFactory">
>>> > +
>>> > +  <Appenders>
>>> > +    <Console name="STDOUT">
>>> > +      <PatternLayout pattern="%m%n"/>
>>> > +    </Console>
>>> > +    <List name="List">
>>> > +      <PatternLayout pattern="%C %M %m"/>
>>> > +    </List>
>>> > +    <Async name="Async" includeLocation="true" error-ref="STDOUT">
>>> > +      <AppenderRef ref="List"/>
>>> > +      <ArrayBlockingQueue/>
>>> > +    </Async>
>>> > +  </Appenders>
>>> > +
>>> > +  <Loggers>
>>> > +    <Root level="debug">
>>> > +      <AppenderRef ref="Async"/>
>>> > +    </Root>
>>> > +  </Loggers>
>>> > +
>>> > +</Configuration>
>>> > \ No newline at end of file
>>> >
>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/65ec9bce/log4j-core/src/test/resources/BlockingQueueFactory-DisruptorBlockingQueue.xml <http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/65ec9bce/log4j-core/src/test/resources/BlockingQueueFactory-DisruptorBlockingQueue.xml>
>>> > ----------------------------------------------------------------------
>>> > diff --git a/log4j-core/src/test/resources/BlockingQueueFactory-DisruptorBlockingQueue.xml b/log4j-core/src/test/resources/BlockingQueueFactory-DisruptorBlockingQueue.xml
>>> > new file mode 100644
>>> > index 0000000..268cca7
>>> > --- /dev/null
>>> > +++ b/log4j-core/src/test/resources/BlockingQueueFactory-DisruptorBlockingQueue.xml
>>> > @@ -0,0 +1,40 @@
>>> > +<?xml version="1.0" encoding="UTF-8"?>
>>> > +<!--
>>> > + Licensed to the Apache Software Foundation (ASF) under one or more
>>> > + contributor license agreements.  See the NOTICE file distributed with
>>> > + this work for additional information regarding copyright ownership.
>>> > + The ASF licenses this file to You under the Apache License, Version 2.0
>>> > + (the "License"); you may not use this file except in compliance with
>>> > + the License.  You may obtain a copy of the License at
>>> > +
>>> > +      http://www.apache.org/licenses/LICENSE-2.0 <http://www.apache.org/licenses/LICENSE-2.0>
>>> > +
>>> > + Unless required by applicable law or agreed to in writing, software
>>> > + distributed under the License is distributed on an "AS IS" BASIS,
>>> > + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
>>> > + See the License for the specific language governing permissions and
>>> > + limitations under the License.
>>> > +
>>> > +-->
>>> > +<Configuration status="OFF" name="DisruptorBlockingQueueFactory">
>>> > +
>>> > +  <Appenders>
>>> > +    <Console name="STDOUT">
>>> > +      <PatternLayout pattern="%m%n"/>
>>> > +    </Console>
>>> > +    <List name="List">
>>> > +      <PatternLayout pattern="%C %M %m"/>
>>> > +    </List>
>>> > +    <Async name="Async" includeLocation="true" error-ref="STDOUT">
>>> > +      <AppenderRef ref="List"/>
>>> > +      <DisruptorBlockingQueue/>
>>> > +    </Async>
>>> > +  </Appenders>
>>> > +
>>> > +  <Loggers>
>>> > +    <Root level="debug">
>>> > +      <AppenderRef ref="Async"/>
>>> > +    </Root>
>>> > +  </Loggers>
>>> > +
>>> > +</Configuration>
>>> > \ No newline at end of file
>>> >
>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/65ec9bce/log4j-core/src/test/resources/BlockingQueueFactory-LinkedTransferQueue.xml <http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/65ec9bce/log4j-core/src/test/resources/BlockingQueueFactory-LinkedTransferQueue.xml>
>>> > ----------------------------------------------------------------------
>>> > diff --git a/log4j-core/src/test/resources/BlockingQueueFactory-LinkedTransferQueue.xml b/log4j-core/src/test/resources/BlockingQueueFactory-LinkedTransferQueue.xml
>>> > new file mode 100644
>>> > index 0000000..13063d3
>>> > --- /dev/null
>>> > +++ b/log4j-core/src/test/resources/BlockingQueueFactory-LinkedTransferQueue.xml
>>> > @@ -0,0 +1,40 @@
>>> > +<?xml version="1.0" encoding="UTF-8"?>
>>> > +<!--
>>> > + Licensed to the Apache Software Foundation (ASF) under one or more
>>> > + contributor license agreements.  See the NOTICE file distributed with
>>> > + this work for additional information regarding copyright ownership.
>>> > + The ASF licenses this file to You under the Apache License, Version 2.0
>>> > + (the "License"); you may not use this file except in compliance with
>>> > + the License.  You may obtain a copy of the License at
>>> > +
>>> > +      http://www.apache.org/licenses/LICENSE-2.0 <http://www.apache.org/licenses/LICENSE-2.0>
>>> > +
>>> > + Unless required by applicable law or agreed to in writing, software
>>> > + distributed under the License is distributed on an "AS IS" BASIS,
>>> > + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
>>> > + See the License for the specific language governing permissions and
>>> > + limitations under the License.
>>> > +
>>> > +-->
>>> > +<Configuration status="OFF" name="LinkedTransferQueueFactory">
>>> > +
>>> > +  <Appenders>
>>> > +    <Console name="STDOUT">
>>> > +      <PatternLayout pattern="%m%n"/>
>>> > +    </Console>
>>> > +    <List name="List">
>>> > +      <PatternLayout pattern="%C %M %m"/>
>>> > +    </List>
>>> > +    <Async name="Async" includeLocation="true" error-ref="STDOUT">
>>> > +      <AppenderRef ref="List"/>
>>> > +      <LinkedTransferQueue/>
>>> > +    </Async>
>>> > +  </Appenders>
>>> > +
>>> > +  <Loggers>
>>> > +    <Root level="debug">
>>> > +      <AppenderRef ref="Async"/>
>>> > +    </Root>
>>> > +  </Loggers>
>>> > +
>>> > +</Configuration>
>>> > \ No newline at end of file
>>> >
>>> >
>>> 
>>> 
>>> 
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: log4j-dev-unsubscribe@logging.apache.org <ma...@logging.apache.org>
>>> For additional commands, e-mail: log4j-dev-help@logging.apache.org <ma...@logging.apache.org>
>>> 
>>> 
>>> 
>>> 
>>> -- 
>>> E-Mail: garydgregory@gmail.com <ma...@gmail.com> | ggregory@apache.org  <ma...@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 <http://garygregory.wordpress.com/> 
>>> Home: http://garygregory.com/ <http://garygregory.com/>
>>> Tweet! http://twitter.com/GaryGregory <http://twitter.com/GaryGregory>
>> 
>> 
>> 
>> -- 
>> E-Mail: garydgregory@gmail.com <ma...@gmail.com> | ggregory@apache.org  <ma...@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 <http://garygregory.wordpress.com/> 
>> Home: http://garygregory.com/ <http://garygregory.com/>
>> Tweet! http://twitter.com/GaryGregory <http://twitter.com/GaryGregory>
> 
> 
> 
> -- 
> Matt Sicker <boards@gmail.com <ma...@gmail.com>>
> 
> 
> 
> -- 
> Matt Sicker <boards@gmail.com <ma...@gmail.com>>
> 
> 
> 
> 
> -- 
> Matt Sicker <boards@gmail.com <ma...@gmail.com>>
> 
> 
> 
> -- 
> Matt Sicker <boards@gmail.com <ma...@gmail.com>>


Re: [13/36] logging-log4j2 git commit: Convert BlockingQueueFactory into a plugin element

Posted by Matt Sicker <bo...@gmail.com>.
By that I mean they set their compiler version to 1.6 for src/main/ and 1.8
for src/test/ which shouldn't affect us as we're not using their test
artifact.

On 6 September 2016 at 11:22, Matt Sicker <bo...@gmail.com> wrote:

> JCTools requires 1.6 for the build and 1.8 for the test. It appears we
> could do the same if the only thing failing the build is a unit test, but
> if the whole build is failing on Java 7, then I can back out those changes
> into a separate branch for future inclusion.
>
> On 6 September 2016 at 11:18, Remko Popma <re...@gmail.com> wrote:
>
>> Does JCTools require Java 8? One option is for this release to leave out
>> the Conversant library and only include JCTools and the TransferQueue.
>>
>> On Wed, Sep 7, 2016 at 1:06 AM, Matt Sicker <bo...@gmail.com> wrote:
>>
>>> I can't believe I didn't notice it, but the Conversant library does
>>> require Java 8. It's an optional dependency, so what to do? We can build on
>>> Java 8 with a target for Java 7 and use the animal-sniffer Maven plugin to
>>> make sure we don't accidentally use anything from Java 8.
>>>
>>> On 5 September 2016 at 22:45, Matt Sicker <bo...@gmail.com> wrote:
>>>
>>>> It looks like I may have merged prematurely then. I think I've been
>>>> running builds using Java 8 as well and didn't notice this. Jenkins isn't
>>>> even loading for me, so I can't see what the problem is on there. I'll take
>>>> a look at this tomorrow, and if I can't fix the dependency issue, I'll back
>>>> out part of this feature for now.
>>>>
>>>> On 5 September 2016 at 17:03, Ralph Goers <ra...@dslextreme.com>
>>>> wrote:
>>>>
>>>>> Jenkins and the release builds use Java 7, so you should certainly use
>>>>> Java 7 from time to time.
>>>>>
>>>>> Ralph
>>>>>
>>>>> On Sep 5, 2016, at 2:33 PM, Gary Gregory <ga...@gmail.com>
>>>>> wrote:
>>>>>
>>>>> Ah, no, Java 8:
>>>>>
>>>>> Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5;
>>>>> 2015-11-10T08:41:47-08:00)
>>>>> Maven home: E:\Java\apache-maven-3.3.9
>>>>> Java version: 1.8.0_101, vendor: Oracle Corporation
>>>>> Java home: C:\Program Files\Java\jdk1.8.0_101\jre
>>>>> Default locale: en_US, platform encoding: Cp1252
>>>>> OS name: "windows 7", version: "6.1", arch: "amd64", family: "dos"
>>>>>
>>>>> Gary
>>>>>
>>>>> On Mon, Sep 5, 2016 at 5:32 PM, Ralph Goers <
>>>>> ralph.goers@dslextreme.com> wrote:
>>>>>
>>>>>> And you are building with Java 7?
>>>>>>
>>>>>> Ralph
>>>>>>
>>>>>> On Sep 5, 2016, at 2:18 PM, Gary Gregory <ga...@gmail.com>
>>>>>> wrote:
>>>>>>
>>>>>> Locally, I get:
>>>>>>
>>>>>> Failed tests:
>>>>>>   RoutingAppenderWithPurgingTest.routingTest:91 Incorrect number of
>>>>>> appenders with IdlePurgePolicy. expected:<3> but was:<1>
>>>>>>
>>>>>> Gary
>>>>>>
>>>>>> On Mon, Sep 5, 2016 at 12:54 PM, Ralph Goers <
>>>>>> ralph.goers@dslextreme.com> wrote:
>>>>>>
>>>>>>> For the record, I am voting -1 on this commit.  It breaks the build
>>>>>>> because the DisruptorBlockingQueueFactory has a dependency that requires
>>>>>>> Java 8. The 2.7 release is blocked until this is corrected.
>>>>>>>
>>>>>>> Ralph
>>>>>>>
>>>>>>> > On Sep 4, 2016, at 11:38 AM, mattsicker@apache.org wrote:
>>>>>>> >
>>>>>>> > Convert BlockingQueueFactory into a plugin element
>>>>>>> >
>>>>>>> > Related to LOG4J2-1430.
>>>>>>> >
>>>>>>> >
>>>>>>> > Project: http://git-wip-us.apache.org/r
>>>>>>> epos/asf/logging-log4j2/repo
>>>>>>> > Commit: http://git-wip-us.apache.org/r
>>>>>>> epos/asf/logging-log4j2/commit/65ec9bce
>>>>>>> > Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/6
>>>>>>> 5ec9bce
>>>>>>> > Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/6
>>>>>>> 5ec9bce
>>>>>>> >
>>>>>>> > Branch: refs/heads/master
>>>>>>> > Commit: 65ec9bcef74dc30ecab9c2091c6e0638d53490d8
>>>>>>> > Parents: 0848d7a
>>>>>>> > Author: Matt Sicker <bo...@gmail.com>
>>>>>>> > Authored: Fri Jun 17 18:51:08 2016 -0500
>>>>>>> > Committer: Matt Sicker <bo...@gmail.com>
>>>>>>> > Committed: Fri Jun 17 18:51:08 2016 -0500
>>>>>>> >
>>>>>>> > ------------------------------------------------------------
>>>>>>> ----------
>>>>>>> > .../log4j/core/appender/AsyncAppender.java      | 24 +++++++++---
>>>>>>> > .../core/async/ArrayBlockingQueueFactory.java   | 10 +++++
>>>>>>> > .../log4j/core/async/BlockingQueueFactory.java  | 13 ++++++-
>>>>>>> > .../async/DisruptorBlockingQueueFactory.java    | 11 +++++-
>>>>>>> > .../core/async/LinkedTransferQueueFactory.java  | 10 +++++
>>>>>>> > .../log4j/core/appender/AsyncAppenderTest.java  | 16 ++++----
>>>>>>> > .../BlockingQueueFactory-ArrayBlockingQueue.xml | 40
>>>>>>> ++++++++++++++++++++
>>>>>>> > ...ckingQueueFactory-DisruptorBlockingQueue.xml | 40
>>>>>>> ++++++++++++++++++++
>>>>>>> > ...BlockingQueueFactory-LinkedTransferQueue.xml | 40
>>>>>>> ++++++++++++++++++++
>>>>>>> > 9 files changed, 189 insertions(+), 15 deletions(-)
>>>>>>> > ------------------------------------------------------------
>>>>>>> ----------
>>>>>>> >
>>>>>>> >
>>>>>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>>>>>> 5ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/co
>>>>>>> re/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/app
>>>>>>> ender/AsyncAppender.java
>>>>>>> > index 3c9c37c..dee5e50 100644
>>>>>>> > --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/app
>>>>>>> ender/AsyncAppender.java
>>>>>>> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/app
>>>>>>> ender/AsyncAppender.java
>>>>>>> > @@ -26,8 +26,11 @@ 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;
>>>>>>> > +import org.apache.logging.log4j.core.
>>>>>>> async.ArrayBlockingQueueFactory;
>>>>>>> > import org.apache.logging.log4j.core.async.AsyncQueueFullPolicy;
>>>>>>> > import org.apache.logging.log4j.core.
>>>>>>> async.AsyncQueueFullPolicyFactory;
>>>>>>> > +import org.apache.logging.log4j.core.async.BlockingQueueFactory;
>>>>>>> > +import org.apache.logging.log4j.core.
>>>>>>> async.BlockingQueueFactoryUtil;
>>>>>>> > import org.apache.logging.log4j.core.
>>>>>>> async.DiscardingAsyncQueueFullPolicy;
>>>>>>> > import org.apache.logging.log4j.core.async.EventRoute;
>>>>>>> > import org.apache.logging.log4j.core.config.AppenderControl;
>>>>>>> > @@ -42,7 +45,6 @@ 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.validation.constraints.Required;
>>>>>>> > import org.apache.logging.log4j.core.impl.Log4jLogEvent;
>>>>>>> > -import org.apache.logging.log4j.core.
>>>>>>> async.BlockingQueueFactoryUtil;
>>>>>>> > import org.apache.logging.log4j.core.util.Constants;
>>>>>>> >
>>>>>>> > /**
>>>>>>> > @@ -73,8 +75,8 @@ public final class AsyncAppender extends
>>>>>>> AbstractAppender {
>>>>>>> >
>>>>>>> >     private AsyncAppender(final String name, final Filter filter,
>>>>>>> final AppenderRef[] appenderRefs,
>>>>>>> >                           final String errorRef, final int
>>>>>>> queueSize, final boolean blocking,
>>>>>>> > -                          final boolean ignoreExceptions,
>>>>>>> > -                          final long shutdownTimeout, final
>>>>>>> Configuration config, final boolean includeLocation) {
>>>>>>> > +                          final boolean ignoreExceptions, final
>>>>>>> long shutdownTimeout, final Configuration config,
>>>>>>> > +                          final boolean includeLocation, final
>>>>>>> BlockingQueueFactory<LogEvent> blockingQueueFactory) {
>>>>>>> >         super(name, filter, null, ignoreExceptions);
>>>>>>> >         this.queue = BlockingQueueFactoryUtil.<LogE
>>>>>>> vent>getBlockingQueueFactory().create(queueSize);
>>>>>>> >         this.queueSize = queueSize;
>>>>>>> > @@ -217,7 +219,9 @@ public final class AsyncAppender extends
>>>>>>> AbstractAppender {
>>>>>>> >     }
>>>>>>> >
>>>>>>> >     /**
>>>>>>> > -     * Create an AsyncAppender.
>>>>>>> > +     * Create an AsyncAppender. This method is retained for
>>>>>>> backwards compatibility. New code should use the
>>>>>>> > +     * {@link Builder} instead. This factory will use {@link
>>>>>>> ArrayBlockingQueueFactory} by default as was the behavior
>>>>>>> > +     * pre-2.7.
>>>>>>> >      *
>>>>>>> >      * @param appenderRefs     The Appenders to reference.
>>>>>>> >      * @param errorRef         An optional Appender to write to if
>>>>>>> the queue is full or other errors occur.
>>>>>>> > @@ -247,7 +251,7 @@ public final class AsyncAppender extends
>>>>>>> AbstractAppender {
>>>>>>> >         }
>>>>>>> >
>>>>>>> >         return new AsyncAppender(name, filter, appenderRefs,
>>>>>>> errorRef, size, blocking, ignoreExceptions,
>>>>>>> > -            shutdownTimeout, config, includeLocation);
>>>>>>> > +            shutdownTimeout, config, includeLocation, new
>>>>>>> ArrayBlockingQueueFactory<LogEvent>());
>>>>>>> >     }
>>>>>>> >
>>>>>>> >     @PluginBuilderFactory
>>>>>>> > @@ -290,6 +294,9 @@ public final class AsyncAppender extends
>>>>>>> AbstractAppender {
>>>>>>> >         @PluginBuilderAttribute
>>>>>>> >         private boolean ignoreExceptions = true;
>>>>>>> >
>>>>>>> > +        @PluginElement(BlockingQueueFactory.ELEMENT_TYPE)
>>>>>>> > +        private BlockingQueueFactory<LogEvent>
>>>>>>> blockingQueueFactory = new ArrayBlockingQueueFactory<>();
>>>>>>> > +
>>>>>>> >         public Builder setAppenderRefs(AppenderRef[] appenderRefs)
>>>>>>> {
>>>>>>> >             this.appenderRefs = appenderRefs;
>>>>>>> >             return this;
>>>>>>> > @@ -340,10 +347,15 @@ public final class AsyncAppender extends
>>>>>>> AbstractAppender {
>>>>>>> >             return this;
>>>>>>> >         }
>>>>>>> >
>>>>>>> > +        public Builder setBlockingQueueFactory(final
>>>>>>> BlockingQueueFactory<LogEvent> blockingQueueFactory) {
>>>>>>> > +            this.blockingQueueFactory = blockingQueueFactory;
>>>>>>> > +            return this;
>>>>>>> > +        }
>>>>>>> > +
>>>>>>> >         @Override
>>>>>>> >         public AsyncAppender build() {
>>>>>>> >             return new AsyncAppender(name, filter, appenderRefs,
>>>>>>> errorRef, bufferSize, blocking, ignoreExceptions,
>>>>>>> > -                shutdownTimeout, configuration, includeLocation);
>>>>>>> > +                shutdownTimeout, configuration, includeLocation,
>>>>>>> blockingQueueFactory);
>>>>>>> >         }
>>>>>>> >     }
>>>>>>> >
>>>>>>> >
>>>>>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>>>>>> 5ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/co
>>>>>>> re/async/ArrayBlockingQueueFactory.java
>>>>>>> > ------------------------------------------------------------
>>>>>>> ----------
>>>>>>> > diff --git a/log4j-core/src/main/java/org
>>>>>>> /apache/logging/log4j/core/async/ArrayBlockingQueueFactory.java
>>>>>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>>>> nc/ArrayBlockingQueueFactory.java
>>>>>>> > index e9c99b8..dcad78a 100644
>>>>>>> > --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>>>> nc/ArrayBlockingQueueFactory.java
>>>>>>> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>>>> nc/ArrayBlockingQueueFactory.java
>>>>>>> > @@ -3,14 +3,24 @@ package org.apache.logging.log4j.core.async;
>>>>>>> > import java.util.concurrent.ArrayBlockingQueue;
>>>>>>> > import java.util.concurrent.BlockingQueue;
>>>>>>> >
>>>>>>> > +import org.apache.logging.log4j.core.config.Node;
>>>>>>> > +import org.apache.logging.log4j.core.config.plugins.Plugin;
>>>>>>> > +import org.apache.logging.log4j.core.
>>>>>>> config.plugins.PluginFactory;
>>>>>>> > +
>>>>>>> > /**
>>>>>>> >  * Factory for creating instances of {@link ArrayBlockingQueue}.
>>>>>>> >  *
>>>>>>> >  * @since 2.7
>>>>>>> >  */
>>>>>>> > +@Plugin(name = "ArrayBlockingQueue", category = Node.CATEGORY,
>>>>>>> elementType = BlockingQueueFactory.ELEMENT_TYPE)
>>>>>>> > public class ArrayBlockingQueueFactory<E> implements
>>>>>>> BlockingQueueFactory<E> {
>>>>>>> >     @Override
>>>>>>> >     public BlockingQueue<E> create(int capacity) {
>>>>>>> >         return new ArrayBlockingQueue<>(capacity);
>>>>>>> >     }
>>>>>>> > +
>>>>>>> > +    @PluginFactory
>>>>>>> > +    public static <E> ArrayBlockingQueueFactory<E>
>>>>>>> createFactory() {
>>>>>>> > +        return new ArrayBlockingQueueFactory<>();
>>>>>>> > +    }
>>>>>>> > }
>>>>>>> >
>>>>>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>>>>>> 5ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/co
>>>>>>> re/async/BlockingQueueFactory.java
>>>>>>> > ------------------------------------------------------------
>>>>>>> ----------
>>>>>>> > diff --git a/log4j-core/src/main/java/org
>>>>>>> /apache/logging/log4j/core/async/BlockingQueueFactory.java
>>>>>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>>>> nc/BlockingQueueFactory.java
>>>>>>> > index ccd1625..5763d1e 100644
>>>>>>> > --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>>>> nc/BlockingQueueFactory.java
>>>>>>> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>>>> nc/BlockingQueueFactory.java
>>>>>>> > @@ -9,7 +9,18 @@ import java.util.concurrent.BlockingQueue;
>>>>>>> >  */
>>>>>>> > public interface BlockingQueueFactory<E> {
>>>>>>> >
>>>>>>> > -    String PROPERTY = "log4j.BlockingQueueFactory";
>>>>>>> > +    /**
>>>>>>> > +     * The {@link org.apache.logging.log4j.core.
>>>>>>> config.plugins.Plugin#elementType() element type} to use for plugins
>>>>>>> > +     * implementing this interface.
>>>>>>> > +     */
>>>>>>> > +    String ELEMENT_TYPE = "BlockingQueueFactory";
>>>>>>> >
>>>>>>> > +    /**
>>>>>>> > +     * Creates a new BlockingQueue with the specified maximum
>>>>>>> capacity. Note that not all implementations of
>>>>>>> > +     * BlockingQueue support a bounded capacity in which case the
>>>>>>> value is ignored.
>>>>>>> > +     *
>>>>>>> > +     * @param capacity maximum size of the queue if supported
>>>>>>> > +     * @return a new BlockingQueue
>>>>>>> > +     */
>>>>>>> >     BlockingQueue<E> create(int capacity);
>>>>>>> > }
>>>>>>> >
>>>>>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>>>>>> 5ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/co
>>>>>>> re/async/DisruptorBlockingQueueFactory.java
>>>>>>> > ------------------------------------------------------------
>>>>>>> ----------
>>>>>>> > diff --git a/log4j-core/src/main/java/org
>>>>>>> /apache/logging/log4j/core/async/DisruptorBlockingQueueFactory.java
>>>>>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>>>> nc/DisruptorBlockingQueueFactory.java
>>>>>>> > index 8fb3707..add375d 100644
>>>>>>> > --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>>>> nc/DisruptorBlockingQueueFactory.java
>>>>>>> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>>>> nc/DisruptorBlockingQueueFactory.java
>>>>>>> > @@ -3,15 +3,24 @@ package org.apache.logging.log4j.core.async;
>>>>>>> > import java.util.concurrent.BlockingQueue;
>>>>>>> >
>>>>>>> > import com.conversantmedia.util.concurrent.DisruptorBlockingQueue;
>>>>>>> > +import org.apache.logging.log4j.core.config.Node;
>>>>>>> > +import org.apache.logging.log4j.core.config.plugins.Plugin;
>>>>>>> > +import org.apache.logging.log4j.core.
>>>>>>> config.plugins.PluginFactory;
>>>>>>> >
>>>>>>> > /**
>>>>>>> >  * Factory for creating instances of {@link
>>>>>>> DisruptorBlockingQueue}.
>>>>>>> >  *
>>>>>>> >  * @since 2.7
>>>>>>> >  */
>>>>>>> > +@Plugin(name = "DisruptorBlockingQueue", category =
>>>>>>> Node.CATEGORY, elementType = BlockingQueueFactory.ELEMENT_TYPE)
>>>>>>> > public class DisruptorBlockingQueueFactory<E> implements
>>>>>>> BlockingQueueFactory<E> {
>>>>>>> >     @Override
>>>>>>> >     public BlockingQueue<E> create(int capacity) {
>>>>>>> > -        return new DisruptorBlockingQueue<E>(capacity);
>>>>>>> > +        return new DisruptorBlockingQueue<>(capacity);
>>>>>>> > +    }
>>>>>>> > +
>>>>>>> > +    @PluginFactory
>>>>>>> > +    public static <E> DisruptorBlockingQueueFactory<E>
>>>>>>> createFactory() {
>>>>>>> > +        return new DisruptorBlockingQueueFactory<>();
>>>>>>> >     }
>>>>>>> > }
>>>>>>> >
>>>>>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>>>>>> 5ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/co
>>>>>>> re/async/LinkedTransferQueueFactory.java
>>>>>>> > ------------------------------------------------------------
>>>>>>> ----------
>>>>>>> > diff --git a/log4j-core/src/main/java/org
>>>>>>> /apache/logging/log4j/core/async/LinkedTransferQueueFactory.java
>>>>>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>>>> nc/LinkedTransferQueueFactory.java
>>>>>>> > index 862fab3..6ab24e7 100644
>>>>>>> > --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>>>> nc/LinkedTransferQueueFactory.java
>>>>>>> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>>>> nc/LinkedTransferQueueFactory.java
>>>>>>> > @@ -20,14 +20,24 @@ package org.apache.logging.log4j.core.async;
>>>>>>> > import java.util.concurrent.BlockingQueue;
>>>>>>> > import java.util.concurrent.LinkedTransferQueue;
>>>>>>> >
>>>>>>> > +import org.apache.logging.log4j.core.config.Node;
>>>>>>> > +import org.apache.logging.log4j.core.config.plugins.Plugin;
>>>>>>> > +import org.apache.logging.log4j.core.
>>>>>>> config.plugins.PluginFactory;
>>>>>>> > +
>>>>>>> > /**
>>>>>>> >  * Factory for creating instances of {@link LinkedTransferQueue}.
>>>>>>> >  *
>>>>>>> >  * @since 2.7
>>>>>>> >  */
>>>>>>> > +@Plugin(name = "LinkedTransferQueue", category = Node.CATEGORY,
>>>>>>> elementType = BlockingQueueFactory.ELEMENT_TYPE)
>>>>>>> > public class LinkedTransferQueueFactory<E> implements
>>>>>>> BlockingQueueFactory<E> {
>>>>>>> >     @Override
>>>>>>> >     public BlockingQueue<E> create(int capacity) {
>>>>>>> >         return new LinkedTransferQueue<>();
>>>>>>> >     }
>>>>>>> > +
>>>>>>> > +    @PluginFactory
>>>>>>> > +    public static <E> LinkedTransferQueueFactory<E>
>>>>>>> createFactory() {
>>>>>>> > +        return new LinkedTransferQueueFactory<>();
>>>>>>> > +    }
>>>>>>> > }
>>>>>>> >
>>>>>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>>>>>> 5ec9bce/log4j-core/src/test/java/org/apache/logging/log4j/co
>>>>>>> re/appender/AsyncAppenderTest.java
>>>>>>> > ------------------------------------------------------------
>>>>>>> ----------
>>>>>>> > diff --git a/log4j-core/src/test/java/org
>>>>>>> /apache/logging/log4j/core/appender/AsyncAppenderTest.java
>>>>>>> b/log4j-core/src/test/java/org/apache/logging/log4j/core/app
>>>>>>> ender/AsyncAppenderTest.java
>>>>>>> > index 3066f38..076fdd0 100644
>>>>>>> > --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/app
>>>>>>> ender/AsyncAppenderTest.java
>>>>>>> > +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/app
>>>>>>> ender/AsyncAppenderTest.java
>>>>>>> > @@ -41,19 +41,21 @@ import static org.junit.Assert.*;
>>>>>>> >  */
>>>>>>> > @RunWith(Parameterized.class)
>>>>>>> > public class AsyncAppenderTest {
>>>>>>> > -    private static final String CONFIG = "log4j-asynch.xml";
>>>>>>> >
>>>>>>> >     @Parameterized.Parameters
>>>>>>> >     public static Object[] data() {
>>>>>>> > -        return new Class<?>[]{
>>>>>>> > -            ArrayBlockingQueueFactory.class,
>>>>>>> > -            DisruptorBlockingQueueFactory.class,
>>>>>>> > -            LinkedTransferQueueFactory.class
>>>>>>> > +        return new String[]{
>>>>>>> > +            // default async config uses array blocking queue
>>>>>>> > +            "log4j-asynch.xml",
>>>>>>> > +            // override default blocking queue implementations
>>>>>>> > +            "BlockingQueueFactory-ArrayBlockingQueue.xml",
>>>>>>> > +            "BlockingQueueFactory-DisruptorBlockingQueue.xml",
>>>>>>> > +            "BlockingQueueFactory-LinkedTransferQueue.xml"
>>>>>>> >         };
>>>>>>> >     }
>>>>>>> >
>>>>>>> > -    public AsyncAppenderTest(final Class<? extends
>>>>>>> BlockingQueueFactory> factory) {
>>>>>>> > -        context = new LoggerContextRule(CONFIG).with
>>>>>>> SystemProperty(BlockingQueueFactory.PROPERTY, factory.getName());
>>>>>>> > +    public AsyncAppenderTest(final String configFileName) {
>>>>>>> > +        context = new LoggerContextRule(configFileName);
>>>>>>> >     }
>>>>>>> >
>>>>>>> >     @Rule
>>>>>>> >
>>>>>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>>>>>> 5ec9bce/log4j-core/src/test/resources/BlockingQueueFactory-A
>>>>>>> rrayBlockingQueue.xml
>>>>>>> > ------------------------------------------------------------
>>>>>>> ----------
>>>>>>> > diff --git a/log4j-core/src/test/resource
>>>>>>> s/BlockingQueueFactory-ArrayBlockingQueue.xml
>>>>>>> b/log4j-core/src/test/resources/BlockingQueueFactory-ArrayBl
>>>>>>> ockingQueue.xml
>>>>>>> > new file mode 100644
>>>>>>> > index 0000000..e8bbfa6
>>>>>>> > --- /dev/null
>>>>>>> > +++ b/log4j-core/src/test/resources/BlockingQueueFactory-ArrayBl
>>>>>>> ockingQueue.xml
>>>>>>> > @@ -0,0 +1,40 @@
>>>>>>> > +<?xml version="1.0" encoding="UTF-8"?>
>>>>>>> > +<!--
>>>>>>> > + Licensed to the Apache Software Foundation (ASF) under one or
>>>>>>> more
>>>>>>> > + contributor license agreements.  See the NOTICE file distributed
>>>>>>> with
>>>>>>> > + this work for additional information regarding copyright
>>>>>>> ownership.
>>>>>>> > + The ASF licenses this file to You under the Apache License,
>>>>>>> Version 2.0
>>>>>>> > + (the "License"); you may not use this file except in compliance
>>>>>>> with
>>>>>>> > + the License.  You may obtain a copy of the License at
>>>>>>> > +
>>>>>>> > +      http://www.apache.org/licenses/LICENSE-2.0
>>>>>>> > +
>>>>>>> > + Unless required by applicable law or agreed to in writing,
>>>>>>> software
>>>>>>> > + distributed under the License is distributed on an "AS IS" BASIS,
>>>>>>> > + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>>>>>>> implied.
>>>>>>> > + See the License for the specific language governing permissions
>>>>>>> and
>>>>>>> > + limitations under the License.
>>>>>>> > +
>>>>>>> > +-->
>>>>>>> > +<Configuration status="OFF" name="ArrayBlockingQueueFactory">
>>>>>>> > +
>>>>>>> > +  <Appenders>
>>>>>>> > +    <Console name="STDOUT">
>>>>>>> > +      <PatternLayout pattern="%m%n"/>
>>>>>>> > +    </Console>
>>>>>>> > +    <List name="List">
>>>>>>> > +      <PatternLayout pattern="%C %M %m"/>
>>>>>>> > +    </List>
>>>>>>> > +    <Async name="Async" includeLocation="true" error-ref="STDOUT">
>>>>>>> > +      <AppenderRef ref="List"/>
>>>>>>> > +      <ArrayBlockingQueue/>
>>>>>>> > +    </Async>
>>>>>>> > +  </Appenders>
>>>>>>> > +
>>>>>>> > +  <Loggers>
>>>>>>> > +    <Root level="debug">
>>>>>>> > +      <AppenderRef ref="Async"/>
>>>>>>> > +    </Root>
>>>>>>> > +  </Loggers>
>>>>>>> > +
>>>>>>> > +</Configuration>
>>>>>>> > \ No newline at end of file
>>>>>>> >
>>>>>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>>>>>> 5ec9bce/log4j-core/src/test/resources/BlockingQueueFactory-D
>>>>>>> isruptorBlockingQueue.xml
>>>>>>> > ------------------------------------------------------------
>>>>>>> ----------
>>>>>>> > diff --git a/log4j-core/src/test/resource
>>>>>>> s/BlockingQueueFactory-DisruptorBlockingQueue.xml
>>>>>>> b/log4j-core/src/test/resources/BlockingQueueFactory-Disrupt
>>>>>>> orBlockingQueue.xml
>>>>>>> > new file mode 100644
>>>>>>> > index 0000000..268cca7
>>>>>>> > --- /dev/null
>>>>>>> > +++ b/log4j-core/src/test/resources/BlockingQueueFactory-Disrupt
>>>>>>> orBlockingQueue.xml
>>>>>>> > @@ -0,0 +1,40 @@
>>>>>>> > +<?xml version="1.0" encoding="UTF-8"?>
>>>>>>> > +<!--
>>>>>>> > + Licensed to the Apache Software Foundation (ASF) under one or
>>>>>>> more
>>>>>>> > + contributor license agreements.  See the NOTICE file distributed
>>>>>>> with
>>>>>>> > + this work for additional information regarding copyright
>>>>>>> ownership.
>>>>>>> > + The ASF licenses this file to You under the Apache License,
>>>>>>> Version 2.0
>>>>>>> > + (the "License"); you may not use this file except in compliance
>>>>>>> with
>>>>>>> > + the License.  You may obtain a copy of the License at
>>>>>>> > +
>>>>>>> > +      http://www.apache.org/licenses/LICENSE-2.0
>>>>>>> > +
>>>>>>> > + Unless required by applicable law or agreed to in writing,
>>>>>>> software
>>>>>>> > + distributed under the License is distributed on an "AS IS" BASIS,
>>>>>>> > + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>>>>>>> implied.
>>>>>>> > + See the License for the specific language governing permissions
>>>>>>> and
>>>>>>> > + limitations under the License.
>>>>>>> > +
>>>>>>> > +-->
>>>>>>> > +<Configuration status="OFF" name="DisruptorBlockingQueueFactory">
>>>>>>> > +
>>>>>>> > +  <Appenders>
>>>>>>> > +    <Console name="STDOUT">
>>>>>>> > +      <PatternLayout pattern="%m%n"/>
>>>>>>> > +    </Console>
>>>>>>> > +    <List name="List">
>>>>>>> > +      <PatternLayout pattern="%C %M %m"/>
>>>>>>> > +    </List>
>>>>>>> > +    <Async name="Async" includeLocation="true" error-ref="STDOUT">
>>>>>>> > +      <AppenderRef ref="List"/>
>>>>>>> > +      <DisruptorBlockingQueue/>
>>>>>>> > +    </Async>
>>>>>>> > +  </Appenders>
>>>>>>> > +
>>>>>>> > +  <Loggers>
>>>>>>> > +    <Root level="debug">
>>>>>>> > +      <AppenderRef ref="Async"/>
>>>>>>> > +    </Root>
>>>>>>> > +  </Loggers>
>>>>>>> > +
>>>>>>> > +</Configuration>
>>>>>>> > \ No newline at end of file
>>>>>>> >
>>>>>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>>>>>> 5ec9bce/log4j-core/src/test/resources/BlockingQueueFactory-L
>>>>>>> inkedTransferQueue.xml
>>>>>>> > ------------------------------------------------------------
>>>>>>> ----------
>>>>>>> > diff --git a/log4j-core/src/test/resource
>>>>>>> s/BlockingQueueFactory-LinkedTransferQueue.xml
>>>>>>> b/log4j-core/src/test/resources/BlockingQueueFactory-LinkedT
>>>>>>> ransferQueue.xml
>>>>>>> > new file mode 100644
>>>>>>> > index 0000000..13063d3
>>>>>>> > --- /dev/null
>>>>>>> > +++ b/log4j-core/src/test/resources/BlockingQueueFactory-LinkedT
>>>>>>> ransferQueue.xml
>>>>>>> > @@ -0,0 +1,40 @@
>>>>>>> > +<?xml version="1.0" encoding="UTF-8"?>
>>>>>>> > +<!--
>>>>>>> > + Licensed to the Apache Software Foundation (ASF) under one or
>>>>>>> more
>>>>>>> > + contributor license agreements.  See the NOTICE file distributed
>>>>>>> with
>>>>>>> > + this work for additional information regarding copyright
>>>>>>> ownership.
>>>>>>> > + The ASF licenses this file to You under the Apache License,
>>>>>>> Version 2.0
>>>>>>> > + (the "License"); you may not use this file except in compliance
>>>>>>> with
>>>>>>> > + the License.  You may obtain a copy of the License at
>>>>>>> > +
>>>>>>> > +      http://www.apache.org/licenses/LICENSE-2.0
>>>>>>> > +
>>>>>>> > + Unless required by applicable law or agreed to in writing,
>>>>>>> software
>>>>>>> > + distributed under the License is distributed on an "AS IS" BASIS,
>>>>>>> > + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>>>>>>> implied.
>>>>>>> > + See the License for the specific language governing permissions
>>>>>>> and
>>>>>>> > + limitations under the License.
>>>>>>> > +
>>>>>>> > +-->
>>>>>>> > +<Configuration status="OFF" name="LinkedTransferQueueFactory">
>>>>>>> > +
>>>>>>> > +  <Appenders>
>>>>>>> > +    <Console name="STDOUT">
>>>>>>> > +      <PatternLayout pattern="%m%n"/>
>>>>>>> > +    </Console>
>>>>>>> > +    <List name="List">
>>>>>>> > +      <PatternLayout pattern="%C %M %m"/>
>>>>>>> > +    </List>
>>>>>>> > +    <Async name="Async" includeLocation="true" error-ref="STDOUT">
>>>>>>> > +      <AppenderRef ref="List"/>
>>>>>>> > +      <LinkedTransferQueue/>
>>>>>>> > +    </Async>
>>>>>>> > +  </Appenders>
>>>>>>> > +
>>>>>>> > +  <Loggers>
>>>>>>> > +    <Root level="debug">
>>>>>>> > +      <AppenderRef ref="Async"/>
>>>>>>> > +    </Root>
>>>>>>> > +  </Loggers>
>>>>>>> > +
>>>>>>> > +</Configuration>
>>>>>>> > \ No newline at end of file
>>>>>>> >
>>>>>>> >
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> ------------------------------------------------------------
>>>>>>> ---------
>>>>>>> To unsubscribe, e-mail: log4j-dev-unsubscribe@logging.apache.org
>>>>>>> For additional commands, e-mail: log4j-dev-help@logging.apache.org
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> 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
>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> 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
>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>> Matt Sicker <bo...@gmail.com>
>>>>
>>>
>>>
>>>
>>> --
>>> Matt Sicker <bo...@gmail.com>
>>>
>>
>>
>
>
> --
> Matt Sicker <bo...@gmail.com>
>



-- 
Matt Sicker <bo...@gmail.com>

Re: [13/36] logging-log4j2 git commit: Convert BlockingQueueFactory into a plugin element

Posted by Matt Sicker <bo...@gmail.com>.
JCTools requires 1.6 for the build and 1.8 for the test. It appears we
could do the same if the only thing failing the build is a unit test, but
if the whole build is failing on Java 7, then I can back out those changes
into a separate branch for future inclusion.

On 6 September 2016 at 11:18, Remko Popma <re...@gmail.com> wrote:

> Does JCTools require Java 8? One option is for this release to leave out
> the Conversant library and only include JCTools and the TransferQueue.
>
> On Wed, Sep 7, 2016 at 1:06 AM, Matt Sicker <bo...@gmail.com> wrote:
>
>> I can't believe I didn't notice it, but the Conversant library does
>> require Java 8. It's an optional dependency, so what to do? We can build on
>> Java 8 with a target for Java 7 and use the animal-sniffer Maven plugin to
>> make sure we don't accidentally use anything from Java 8.
>>
>> On 5 September 2016 at 22:45, Matt Sicker <bo...@gmail.com> wrote:
>>
>>> It looks like I may have merged prematurely then. I think I've been
>>> running builds using Java 8 as well and didn't notice this. Jenkins isn't
>>> even loading for me, so I can't see what the problem is on there. I'll take
>>> a look at this tomorrow, and if I can't fix the dependency issue, I'll back
>>> out part of this feature for now.
>>>
>>> On 5 September 2016 at 17:03, Ralph Goers <ra...@dslextreme.com>
>>> wrote:
>>>
>>>> Jenkins and the release builds use Java 7, so you should certainly use
>>>> Java 7 from time to time.
>>>>
>>>> Ralph
>>>>
>>>> On Sep 5, 2016, at 2:33 PM, Gary Gregory <ga...@gmail.com>
>>>> wrote:
>>>>
>>>> Ah, no, Java 8:
>>>>
>>>> Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5;
>>>> 2015-11-10T08:41:47-08:00)
>>>> Maven home: E:\Java\apache-maven-3.3.9
>>>> Java version: 1.8.0_101, vendor: Oracle Corporation
>>>> Java home: C:\Program Files\Java\jdk1.8.0_101\jre
>>>> Default locale: en_US, platform encoding: Cp1252
>>>> OS name: "windows 7", version: "6.1", arch: "amd64", family: "dos"
>>>>
>>>> Gary
>>>>
>>>> On Mon, Sep 5, 2016 at 5:32 PM, Ralph Goers <ralph.goers@dslextreme.com
>>>> > wrote:
>>>>
>>>>> And you are building with Java 7?
>>>>>
>>>>> Ralph
>>>>>
>>>>> On Sep 5, 2016, at 2:18 PM, Gary Gregory <ga...@gmail.com>
>>>>> wrote:
>>>>>
>>>>> Locally, I get:
>>>>>
>>>>> Failed tests:
>>>>>   RoutingAppenderWithPurgingTest.routingTest:91 Incorrect number of
>>>>> appenders with IdlePurgePolicy. expected:<3> but was:<1>
>>>>>
>>>>> Gary
>>>>>
>>>>> On Mon, Sep 5, 2016 at 12:54 PM, Ralph Goers <
>>>>> ralph.goers@dslextreme.com> wrote:
>>>>>
>>>>>> For the record, I am voting -1 on this commit.  It breaks the build
>>>>>> because the DisruptorBlockingQueueFactory has a dependency that requires
>>>>>> Java 8. The 2.7 release is blocked until this is corrected.
>>>>>>
>>>>>> Ralph
>>>>>>
>>>>>> > On Sep 4, 2016, at 11:38 AM, mattsicker@apache.org wrote:
>>>>>> >
>>>>>> > Convert BlockingQueueFactory into a plugin element
>>>>>> >
>>>>>> > Related to LOG4J2-1430.
>>>>>> >
>>>>>> >
>>>>>> > Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
>>>>>> > Commit: http://git-wip-us.apache.org/r
>>>>>> epos/asf/logging-log4j2/commit/65ec9bce
>>>>>> > Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/6
>>>>>> 5ec9bce
>>>>>> > Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/6
>>>>>> 5ec9bce
>>>>>> >
>>>>>> > Branch: refs/heads/master
>>>>>> > Commit: 65ec9bcef74dc30ecab9c2091c6e0638d53490d8
>>>>>> > Parents: 0848d7a
>>>>>> > Author: Matt Sicker <bo...@gmail.com>
>>>>>> > Authored: Fri Jun 17 18:51:08 2016 -0500
>>>>>> > Committer: Matt Sicker <bo...@gmail.com>
>>>>>> > Committed: Fri Jun 17 18:51:08 2016 -0500
>>>>>> >
>>>>>> > ------------------------------------------------------------
>>>>>> ----------
>>>>>> > .../log4j/core/appender/AsyncAppender.java      | 24 +++++++++---
>>>>>> > .../core/async/ArrayBlockingQueueFactory.java   | 10 +++++
>>>>>> > .../log4j/core/async/BlockingQueueFactory.java  | 13 ++++++-
>>>>>> > .../async/DisruptorBlockingQueueFactory.java    | 11 +++++-
>>>>>> > .../core/async/LinkedTransferQueueFactory.java  | 10 +++++
>>>>>> > .../log4j/core/appender/AsyncAppenderTest.java  | 16 ++++----
>>>>>> > .../BlockingQueueFactory-ArrayBlockingQueue.xml | 40
>>>>>> ++++++++++++++++++++
>>>>>> > ...ckingQueueFactory-DisruptorBlockingQueue.xml | 40
>>>>>> ++++++++++++++++++++
>>>>>> > ...BlockingQueueFactory-LinkedTransferQueue.xml | 40
>>>>>> ++++++++++++++++++++
>>>>>> > 9 files changed, 189 insertions(+), 15 deletions(-)
>>>>>> > ------------------------------------------------------------
>>>>>> ----------
>>>>>> >
>>>>>> >
>>>>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>>>>> 5ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/co
>>>>>> re/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/app
>>>>>> ender/AsyncAppender.java
>>>>>> > index 3c9c37c..dee5e50 100644
>>>>>> > --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/app
>>>>>> ender/AsyncAppender.java
>>>>>> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/app
>>>>>> ender/AsyncAppender.java
>>>>>> > @@ -26,8 +26,11 @@ 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;
>>>>>> > +import org.apache.logging.log4j.core.
>>>>>> async.ArrayBlockingQueueFactory;
>>>>>> > import org.apache.logging.log4j.core.async.AsyncQueueFullPolicy;
>>>>>> > import org.apache.logging.log4j.core.async.AsyncQueueFullPolicyFact
>>>>>> ory;
>>>>>> > +import org.apache.logging.log4j.core.async.BlockingQueueFactory;
>>>>>> > +import org.apache.logging.log4j.core.
>>>>>> async.BlockingQueueFactoryUtil;
>>>>>> > import org.apache.logging.log4j.core.async.DiscardingAsyncQueueFull
>>>>>> Policy;
>>>>>> > import org.apache.logging.log4j.core.async.EventRoute;
>>>>>> > import org.apache.logging.log4j.core.config.AppenderControl;
>>>>>> > @@ -42,7 +45,6 @@ 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.validation.cons
>>>>>> traints.Required;
>>>>>> > import org.apache.logging.log4j.core.impl.Log4jLogEvent;
>>>>>> > -import org.apache.logging.log4j.core.
>>>>>> async.BlockingQueueFactoryUtil;
>>>>>> > import org.apache.logging.log4j.core.util.Constants;
>>>>>> >
>>>>>> > /**
>>>>>> > @@ -73,8 +75,8 @@ public final class AsyncAppender extends
>>>>>> AbstractAppender {
>>>>>> >
>>>>>> >     private AsyncAppender(final String name, final Filter filter,
>>>>>> final AppenderRef[] appenderRefs,
>>>>>> >                           final String errorRef, final int
>>>>>> queueSize, final boolean blocking,
>>>>>> > -                          final boolean ignoreExceptions,
>>>>>> > -                          final long shutdownTimeout, final
>>>>>> Configuration config, final boolean includeLocation) {
>>>>>> > +                          final boolean ignoreExceptions, final
>>>>>> long shutdownTimeout, final Configuration config,
>>>>>> > +                          final boolean includeLocation, final
>>>>>> BlockingQueueFactory<LogEvent> blockingQueueFactory) {
>>>>>> >         super(name, filter, null, ignoreExceptions);
>>>>>> >         this.queue = BlockingQueueFactoryUtil.<LogE
>>>>>> vent>getBlockingQueueFactory().create(queueSize);
>>>>>> >         this.queueSize = queueSize;
>>>>>> > @@ -217,7 +219,9 @@ public final class AsyncAppender extends
>>>>>> AbstractAppender {
>>>>>> >     }
>>>>>> >
>>>>>> >     /**
>>>>>> > -     * Create an AsyncAppender.
>>>>>> > +     * Create an AsyncAppender. This method is retained for
>>>>>> backwards compatibility. New code should use the
>>>>>> > +     * {@link Builder} instead. This factory will use {@link
>>>>>> ArrayBlockingQueueFactory} by default as was the behavior
>>>>>> > +     * pre-2.7.
>>>>>> >      *
>>>>>> >      * @param appenderRefs     The Appenders to reference.
>>>>>> >      * @param errorRef         An optional Appender to write to if
>>>>>> the queue is full or other errors occur.
>>>>>> > @@ -247,7 +251,7 @@ public final class AsyncAppender extends
>>>>>> AbstractAppender {
>>>>>> >         }
>>>>>> >
>>>>>> >         return new AsyncAppender(name, filter, appenderRefs,
>>>>>> errorRef, size, blocking, ignoreExceptions,
>>>>>> > -            shutdownTimeout, config, includeLocation);
>>>>>> > +            shutdownTimeout, config, includeLocation, new
>>>>>> ArrayBlockingQueueFactory<LogEvent>());
>>>>>> >     }
>>>>>> >
>>>>>> >     @PluginBuilderFactory
>>>>>> > @@ -290,6 +294,9 @@ public final class AsyncAppender extends
>>>>>> AbstractAppender {
>>>>>> >         @PluginBuilderAttribute
>>>>>> >         private boolean ignoreExceptions = true;
>>>>>> >
>>>>>> > +        @PluginElement(BlockingQueueFactory.ELEMENT_TYPE)
>>>>>> > +        private BlockingQueueFactory<LogEvent>
>>>>>> blockingQueueFactory = new ArrayBlockingQueueFactory<>();
>>>>>> > +
>>>>>> >         public Builder setAppenderRefs(AppenderRef[] appenderRefs) {
>>>>>> >             this.appenderRefs = appenderRefs;
>>>>>> >             return this;
>>>>>> > @@ -340,10 +347,15 @@ public final class AsyncAppender extends
>>>>>> AbstractAppender {
>>>>>> >             return this;
>>>>>> >         }
>>>>>> >
>>>>>> > +        public Builder setBlockingQueueFactory(final
>>>>>> BlockingQueueFactory<LogEvent> blockingQueueFactory) {
>>>>>> > +            this.blockingQueueFactory = blockingQueueFactory;
>>>>>> > +            return this;
>>>>>> > +        }
>>>>>> > +
>>>>>> >         @Override
>>>>>> >         public AsyncAppender build() {
>>>>>> >             return new AsyncAppender(name, filter, appenderRefs,
>>>>>> errorRef, bufferSize, blocking, ignoreExceptions,
>>>>>> > -                shutdownTimeout, configuration, includeLocation);
>>>>>> > +                shutdownTimeout, configuration, includeLocation,
>>>>>> blockingQueueFactory);
>>>>>> >         }
>>>>>> >     }
>>>>>> >
>>>>>> >
>>>>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>>>>> 5ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/co
>>>>>> re/async/ArrayBlockingQueueFactory.java
>>>>>> > ------------------------------------------------------------
>>>>>> ----------
>>>>>> > diff --git a/log4j-core/src/main/java/org
>>>>>> /apache/logging/log4j/core/async/ArrayBlockingQueueFactory.java
>>>>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>>> nc/ArrayBlockingQueueFactory.java
>>>>>> > index e9c99b8..dcad78a 100644
>>>>>> > --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>>> nc/ArrayBlockingQueueFactory.java
>>>>>> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>>> nc/ArrayBlockingQueueFactory.java
>>>>>> > @@ -3,14 +3,24 @@ package org.apache.logging.log4j.core.async;
>>>>>> > import java.util.concurrent.ArrayBlockingQueue;
>>>>>> > import java.util.concurrent.BlockingQueue;
>>>>>> >
>>>>>> > +import org.apache.logging.log4j.core.config.Node;
>>>>>> > +import org.apache.logging.log4j.core.config.plugins.Plugin;
>>>>>> > +import org.apache.logging.log4j.core.config.plugins.PluginFactory;
>>>>>> > +
>>>>>> > /**
>>>>>> >  * Factory for creating instances of {@link ArrayBlockingQueue}.
>>>>>> >  *
>>>>>> >  * @since 2.7
>>>>>> >  */
>>>>>> > +@Plugin(name = "ArrayBlockingQueue", category = Node.CATEGORY,
>>>>>> elementType = BlockingQueueFactory.ELEMENT_TYPE)
>>>>>> > public class ArrayBlockingQueueFactory<E> implements
>>>>>> BlockingQueueFactory<E> {
>>>>>> >     @Override
>>>>>> >     public BlockingQueue<E> create(int capacity) {
>>>>>> >         return new ArrayBlockingQueue<>(capacity);
>>>>>> >     }
>>>>>> > +
>>>>>> > +    @PluginFactory
>>>>>> > +    public static <E> ArrayBlockingQueueFactory<E> createFactory()
>>>>>> {
>>>>>> > +        return new ArrayBlockingQueueFactory<>();
>>>>>> > +    }
>>>>>> > }
>>>>>> >
>>>>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>>>>> 5ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/co
>>>>>> re/async/BlockingQueueFactory.java
>>>>>> > ------------------------------------------------------------
>>>>>> ----------
>>>>>> > diff --git a/log4j-core/src/main/java/org
>>>>>> /apache/logging/log4j/core/async/BlockingQueueFactory.java
>>>>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>>> nc/BlockingQueueFactory.java
>>>>>> > index ccd1625..5763d1e 100644
>>>>>> > --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>>> nc/BlockingQueueFactory.java
>>>>>> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>>> nc/BlockingQueueFactory.java
>>>>>> > @@ -9,7 +9,18 @@ import java.util.concurrent.BlockingQueue;
>>>>>> >  */
>>>>>> > public interface BlockingQueueFactory<E> {
>>>>>> >
>>>>>> > -    String PROPERTY = "log4j.BlockingQueueFactory";
>>>>>> > +    /**
>>>>>> > +     * The {@link org.apache.logging.log4j.core.
>>>>>> config.plugins.Plugin#elementType() element type} to use for plugins
>>>>>> > +     * implementing this interface.
>>>>>> > +     */
>>>>>> > +    String ELEMENT_TYPE = "BlockingQueueFactory";
>>>>>> >
>>>>>> > +    /**
>>>>>> > +     * Creates a new BlockingQueue with the specified maximum
>>>>>> capacity. Note that not all implementations of
>>>>>> > +     * BlockingQueue support a bounded capacity in which case the
>>>>>> value is ignored.
>>>>>> > +     *
>>>>>> > +     * @param capacity maximum size of the queue if supported
>>>>>> > +     * @return a new BlockingQueue
>>>>>> > +     */
>>>>>> >     BlockingQueue<E> create(int capacity);
>>>>>> > }
>>>>>> >
>>>>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>>>>> 5ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/co
>>>>>> re/async/DisruptorBlockingQueueFactory.java
>>>>>> > ------------------------------------------------------------
>>>>>> ----------
>>>>>> > diff --git a/log4j-core/src/main/java/org
>>>>>> /apache/logging/log4j/core/async/DisruptorBlockingQueueFactory.java
>>>>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>>> nc/DisruptorBlockingQueueFactory.java
>>>>>> > index 8fb3707..add375d 100644
>>>>>> > --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>>> nc/DisruptorBlockingQueueFactory.java
>>>>>> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>>> nc/DisruptorBlockingQueueFactory.java
>>>>>> > @@ -3,15 +3,24 @@ package org.apache.logging.log4j.core.async;
>>>>>> > import java.util.concurrent.BlockingQueue;
>>>>>> >
>>>>>> > import com.conversantmedia.util.concurrent.DisruptorBlockingQueue;
>>>>>> > +import org.apache.logging.log4j.core.config.Node;
>>>>>> > +import org.apache.logging.log4j.core.config.plugins.Plugin;
>>>>>> > +import org.apache.logging.log4j.core.config.plugins.PluginFactory;
>>>>>> >
>>>>>> > /**
>>>>>> >  * Factory for creating instances of {@link DisruptorBlockingQueue}.
>>>>>> >  *
>>>>>> >  * @since 2.7
>>>>>> >  */
>>>>>> > +@Plugin(name = "DisruptorBlockingQueue", category = Node.CATEGORY,
>>>>>> elementType = BlockingQueueFactory.ELEMENT_TYPE)
>>>>>> > public class DisruptorBlockingQueueFactory<E> implements
>>>>>> BlockingQueueFactory<E> {
>>>>>> >     @Override
>>>>>> >     public BlockingQueue<E> create(int capacity) {
>>>>>> > -        return new DisruptorBlockingQueue<E>(capacity);
>>>>>> > +        return new DisruptorBlockingQueue<>(capacity);
>>>>>> > +    }
>>>>>> > +
>>>>>> > +    @PluginFactory
>>>>>> > +    public static <E> DisruptorBlockingQueueFactory<E>
>>>>>> createFactory() {
>>>>>> > +        return new DisruptorBlockingQueueFactory<>();
>>>>>> >     }
>>>>>> > }
>>>>>> >
>>>>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>>>>> 5ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/co
>>>>>> re/async/LinkedTransferQueueFactory.java
>>>>>> > ------------------------------------------------------------
>>>>>> ----------
>>>>>> > diff --git a/log4j-core/src/main/java/org
>>>>>> /apache/logging/log4j/core/async/LinkedTransferQueueFactory.java
>>>>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>>> nc/LinkedTransferQueueFactory.java
>>>>>> > index 862fab3..6ab24e7 100644
>>>>>> > --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>>> nc/LinkedTransferQueueFactory.java
>>>>>> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>>> nc/LinkedTransferQueueFactory.java
>>>>>> > @@ -20,14 +20,24 @@ package org.apache.logging.log4j.core.async;
>>>>>> > import java.util.concurrent.BlockingQueue;
>>>>>> > import java.util.concurrent.LinkedTransferQueue;
>>>>>> >
>>>>>> > +import org.apache.logging.log4j.core.config.Node;
>>>>>> > +import org.apache.logging.log4j.core.config.plugins.Plugin;
>>>>>> > +import org.apache.logging.log4j.core.config.plugins.PluginFactory;
>>>>>> > +
>>>>>> > /**
>>>>>> >  * Factory for creating instances of {@link LinkedTransferQueue}.
>>>>>> >  *
>>>>>> >  * @since 2.7
>>>>>> >  */
>>>>>> > +@Plugin(name = "LinkedTransferQueue", category = Node.CATEGORY,
>>>>>> elementType = BlockingQueueFactory.ELEMENT_TYPE)
>>>>>> > public class LinkedTransferQueueFactory<E> implements
>>>>>> BlockingQueueFactory<E> {
>>>>>> >     @Override
>>>>>> >     public BlockingQueue<E> create(int capacity) {
>>>>>> >         return new LinkedTransferQueue<>();
>>>>>> >     }
>>>>>> > +
>>>>>> > +    @PluginFactory
>>>>>> > +    public static <E> LinkedTransferQueueFactory<E>
>>>>>> createFactory() {
>>>>>> > +        return new LinkedTransferQueueFactory<>();
>>>>>> > +    }
>>>>>> > }
>>>>>> >
>>>>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>>>>> 5ec9bce/log4j-core/src/test/java/org/apache/logging/log4j/co
>>>>>> re/appender/AsyncAppenderTest.java
>>>>>> > ------------------------------------------------------------
>>>>>> ----------
>>>>>> > diff --git a/log4j-core/src/test/java/org
>>>>>> /apache/logging/log4j/core/appender/AsyncAppenderTest.java
>>>>>> b/log4j-core/src/test/java/org/apache/logging/log4j/core/app
>>>>>> ender/AsyncAppenderTest.java
>>>>>> > index 3066f38..076fdd0 100644
>>>>>> > --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/app
>>>>>> ender/AsyncAppenderTest.java
>>>>>> > +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/app
>>>>>> ender/AsyncAppenderTest.java
>>>>>> > @@ -41,19 +41,21 @@ import static org.junit.Assert.*;
>>>>>> >  */
>>>>>> > @RunWith(Parameterized.class)
>>>>>> > public class AsyncAppenderTest {
>>>>>> > -    private static final String CONFIG = "log4j-asynch.xml";
>>>>>> >
>>>>>> >     @Parameterized.Parameters
>>>>>> >     public static Object[] data() {
>>>>>> > -        return new Class<?>[]{
>>>>>> > -            ArrayBlockingQueueFactory.class,
>>>>>> > -            DisruptorBlockingQueueFactory.class,
>>>>>> > -            LinkedTransferQueueFactory.class
>>>>>> > +        return new String[]{
>>>>>> > +            // default async config uses array blocking queue
>>>>>> > +            "log4j-asynch.xml",
>>>>>> > +            // override default blocking queue implementations
>>>>>> > +            "BlockingQueueFactory-ArrayBlockingQueue.xml",
>>>>>> > +            "BlockingQueueFactory-DisruptorBlockingQueue.xml",
>>>>>> > +            "BlockingQueueFactory-LinkedTransferQueue.xml"
>>>>>> >         };
>>>>>> >     }
>>>>>> >
>>>>>> > -    public AsyncAppenderTest(final Class<? extends
>>>>>> BlockingQueueFactory> factory) {
>>>>>> > -        context = new LoggerContextRule(CONFIG).with
>>>>>> SystemProperty(BlockingQueueFactory.PROPERTY, factory.getName());
>>>>>> > +    public AsyncAppenderTest(final String configFileName) {
>>>>>> > +        context = new LoggerContextRule(configFileName);
>>>>>> >     }
>>>>>> >
>>>>>> >     @Rule
>>>>>> >
>>>>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>>>>> 5ec9bce/log4j-core/src/test/resources/BlockingQueueFactory-A
>>>>>> rrayBlockingQueue.xml
>>>>>> > ------------------------------------------------------------
>>>>>> ----------
>>>>>> > diff --git a/log4j-core/src/test/resource
>>>>>> s/BlockingQueueFactory-ArrayBlockingQueue.xml
>>>>>> b/log4j-core/src/test/resources/BlockingQueueFactory-ArrayBl
>>>>>> ockingQueue.xml
>>>>>> > new file mode 100644
>>>>>> > index 0000000..e8bbfa6
>>>>>> > --- /dev/null
>>>>>> > +++ b/log4j-core/src/test/resources/BlockingQueueFactory-ArrayBl
>>>>>> ockingQueue.xml
>>>>>> > @@ -0,0 +1,40 @@
>>>>>> > +<?xml version="1.0" encoding="UTF-8"?>
>>>>>> > +<!--
>>>>>> > + Licensed to the Apache Software Foundation (ASF) under one or more
>>>>>> > + contributor license agreements.  See the NOTICE file distributed
>>>>>> with
>>>>>> > + this work for additional information regarding copyright
>>>>>> ownership.
>>>>>> > + The ASF licenses this file to You under the Apache License,
>>>>>> Version 2.0
>>>>>> > + (the "License"); you may not use this file except in compliance
>>>>>> with
>>>>>> > + the License.  You may obtain a copy of the License at
>>>>>> > +
>>>>>> > +      http://www.apache.org/licenses/LICENSE-2.0
>>>>>> > +
>>>>>> > + Unless required by applicable law or agreed to in writing,
>>>>>> software
>>>>>> > + distributed under the License is distributed on an "AS IS" BASIS,
>>>>>> > + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>>>>>> implied.
>>>>>> > + See the License for the specific language governing permissions
>>>>>> and
>>>>>> > + limitations under the License.
>>>>>> > +
>>>>>> > +-->
>>>>>> > +<Configuration status="OFF" name="ArrayBlockingQueueFactory">
>>>>>> > +
>>>>>> > +  <Appenders>
>>>>>> > +    <Console name="STDOUT">
>>>>>> > +      <PatternLayout pattern="%m%n"/>
>>>>>> > +    </Console>
>>>>>> > +    <List name="List">
>>>>>> > +      <PatternLayout pattern="%C %M %m"/>
>>>>>> > +    </List>
>>>>>> > +    <Async name="Async" includeLocation="true" error-ref="STDOUT">
>>>>>> > +      <AppenderRef ref="List"/>
>>>>>> > +      <ArrayBlockingQueue/>
>>>>>> > +    </Async>
>>>>>> > +  </Appenders>
>>>>>> > +
>>>>>> > +  <Loggers>
>>>>>> > +    <Root level="debug">
>>>>>> > +      <AppenderRef ref="Async"/>
>>>>>> > +    </Root>
>>>>>> > +  </Loggers>
>>>>>> > +
>>>>>> > +</Configuration>
>>>>>> > \ No newline at end of file
>>>>>> >
>>>>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>>>>> 5ec9bce/log4j-core/src/test/resources/BlockingQueueFactory-D
>>>>>> isruptorBlockingQueue.xml
>>>>>> > ------------------------------------------------------------
>>>>>> ----------
>>>>>> > diff --git a/log4j-core/src/test/resource
>>>>>> s/BlockingQueueFactory-DisruptorBlockingQueue.xml
>>>>>> b/log4j-core/src/test/resources/BlockingQueueFactory-Disrupt
>>>>>> orBlockingQueue.xml
>>>>>> > new file mode 100644
>>>>>> > index 0000000..268cca7
>>>>>> > --- /dev/null
>>>>>> > +++ b/log4j-core/src/test/resources/BlockingQueueFactory-Disrupt
>>>>>> orBlockingQueue.xml
>>>>>> > @@ -0,0 +1,40 @@
>>>>>> > +<?xml version="1.0" encoding="UTF-8"?>
>>>>>> > +<!--
>>>>>> > + Licensed to the Apache Software Foundation (ASF) under one or more
>>>>>> > + contributor license agreements.  See the NOTICE file distributed
>>>>>> with
>>>>>> > + this work for additional information regarding copyright
>>>>>> ownership.
>>>>>> > + The ASF licenses this file to You under the Apache License,
>>>>>> Version 2.0
>>>>>> > + (the "License"); you may not use this file except in compliance
>>>>>> with
>>>>>> > + the License.  You may obtain a copy of the License at
>>>>>> > +
>>>>>> > +      http://www.apache.org/licenses/LICENSE-2.0
>>>>>> > +
>>>>>> > + Unless required by applicable law or agreed to in writing,
>>>>>> software
>>>>>> > + distributed under the License is distributed on an "AS IS" BASIS,
>>>>>> > + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>>>>>> implied.
>>>>>> > + See the License for the specific language governing permissions
>>>>>> and
>>>>>> > + limitations under the License.
>>>>>> > +
>>>>>> > +-->
>>>>>> > +<Configuration status="OFF" name="DisruptorBlockingQueueFactory">
>>>>>> > +
>>>>>> > +  <Appenders>
>>>>>> > +    <Console name="STDOUT">
>>>>>> > +      <PatternLayout pattern="%m%n"/>
>>>>>> > +    </Console>
>>>>>> > +    <List name="List">
>>>>>> > +      <PatternLayout pattern="%C %M %m"/>
>>>>>> > +    </List>
>>>>>> > +    <Async name="Async" includeLocation="true" error-ref="STDOUT">
>>>>>> > +      <AppenderRef ref="List"/>
>>>>>> > +      <DisruptorBlockingQueue/>
>>>>>> > +    </Async>
>>>>>> > +  </Appenders>
>>>>>> > +
>>>>>> > +  <Loggers>
>>>>>> > +    <Root level="debug">
>>>>>> > +      <AppenderRef ref="Async"/>
>>>>>> > +    </Root>
>>>>>> > +  </Loggers>
>>>>>> > +
>>>>>> > +</Configuration>
>>>>>> > \ No newline at end of file
>>>>>> >
>>>>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>>>>> 5ec9bce/log4j-core/src/test/resources/BlockingQueueFactory-L
>>>>>> inkedTransferQueue.xml
>>>>>> > ------------------------------------------------------------
>>>>>> ----------
>>>>>> > diff --git a/log4j-core/src/test/resource
>>>>>> s/BlockingQueueFactory-LinkedTransferQueue.xml
>>>>>> b/log4j-core/src/test/resources/BlockingQueueFactory-LinkedT
>>>>>> ransferQueue.xml
>>>>>> > new file mode 100644
>>>>>> > index 0000000..13063d3
>>>>>> > --- /dev/null
>>>>>> > +++ b/log4j-core/src/test/resources/BlockingQueueFactory-LinkedT
>>>>>> ransferQueue.xml
>>>>>> > @@ -0,0 +1,40 @@
>>>>>> > +<?xml version="1.0" encoding="UTF-8"?>
>>>>>> > +<!--
>>>>>> > + Licensed to the Apache Software Foundation (ASF) under one or more
>>>>>> > + contributor license agreements.  See the NOTICE file distributed
>>>>>> with
>>>>>> > + this work for additional information regarding copyright
>>>>>> ownership.
>>>>>> > + The ASF licenses this file to You under the Apache License,
>>>>>> Version 2.0
>>>>>> > + (the "License"); you may not use this file except in compliance
>>>>>> with
>>>>>> > + the License.  You may obtain a copy of the License at
>>>>>> > +
>>>>>> > +      http://www.apache.org/licenses/LICENSE-2.0
>>>>>> > +
>>>>>> > + Unless required by applicable law or agreed to in writing,
>>>>>> software
>>>>>> > + distributed under the License is distributed on an "AS IS" BASIS,
>>>>>> > + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>>>>>> implied.
>>>>>> > + See the License for the specific language governing permissions
>>>>>> and
>>>>>> > + limitations under the License.
>>>>>> > +
>>>>>> > +-->
>>>>>> > +<Configuration status="OFF" name="LinkedTransferQueueFactory">
>>>>>> > +
>>>>>> > +  <Appenders>
>>>>>> > +    <Console name="STDOUT">
>>>>>> > +      <PatternLayout pattern="%m%n"/>
>>>>>> > +    </Console>
>>>>>> > +    <List name="List">
>>>>>> > +      <PatternLayout pattern="%C %M %m"/>
>>>>>> > +    </List>
>>>>>> > +    <Async name="Async" includeLocation="true" error-ref="STDOUT">
>>>>>> > +      <AppenderRef ref="List"/>
>>>>>> > +      <LinkedTransferQueue/>
>>>>>> > +    </Async>
>>>>>> > +  </Appenders>
>>>>>> > +
>>>>>> > +  <Loggers>
>>>>>> > +    <Root level="debug">
>>>>>> > +      <AppenderRef ref="Async"/>
>>>>>> > +    </Root>
>>>>>> > +  </Loggers>
>>>>>> > +
>>>>>> > +</Configuration>
>>>>>> > \ No newline at end of file
>>>>>> >
>>>>>> >
>>>>>>
>>>>>>
>>>>>>
>>>>>> ---------------------------------------------------------------------
>>>>>> To unsubscribe, e-mail: log4j-dev-unsubscribe@logging.apache.org
>>>>>> For additional commands, e-mail: log4j-dev-help@logging.apache.org
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> 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
>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>> 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
>>>>
>>>>
>>>>
>>>
>>>
>>> --
>>> Matt Sicker <bo...@gmail.com>
>>>
>>
>>
>>
>> --
>> Matt Sicker <bo...@gmail.com>
>>
>
>


-- 
Matt Sicker <bo...@gmail.com>

Re: [13/36] logging-log4j2 git commit: Convert BlockingQueueFactory into a plugin element

Posted by Remko Popma <re...@gmail.com>.
Does JCTools require Java 8? One option is for this release to leave out
the Conversant library and only include JCTools and the TransferQueue.

On Wed, Sep 7, 2016 at 1:06 AM, Matt Sicker <bo...@gmail.com> wrote:

> I can't believe I didn't notice it, but the Conversant library does
> require Java 8. It's an optional dependency, so what to do? We can build on
> Java 8 with a target for Java 7 and use the animal-sniffer Maven plugin to
> make sure we don't accidentally use anything from Java 8.
>
> On 5 September 2016 at 22:45, Matt Sicker <bo...@gmail.com> wrote:
>
>> It looks like I may have merged prematurely then. I think I've been
>> running builds using Java 8 as well and didn't notice this. Jenkins isn't
>> even loading for me, so I can't see what the problem is on there. I'll take
>> a look at this tomorrow, and if I can't fix the dependency issue, I'll back
>> out part of this feature for now.
>>
>> On 5 September 2016 at 17:03, Ralph Goers <ra...@dslextreme.com>
>> wrote:
>>
>>> Jenkins and the release builds use Java 7, so you should certainly use
>>> Java 7 from time to time.
>>>
>>> Ralph
>>>
>>> On Sep 5, 2016, at 2:33 PM, Gary Gregory <ga...@gmail.com> wrote:
>>>
>>> Ah, no, Java 8:
>>>
>>> Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5;
>>> 2015-11-10T08:41:47-08:00)
>>> Maven home: E:\Java\apache-maven-3.3.9
>>> Java version: 1.8.0_101, vendor: Oracle Corporation
>>> Java home: C:\Program Files\Java\jdk1.8.0_101\jre
>>> Default locale: en_US, platform encoding: Cp1252
>>> OS name: "windows 7", version: "6.1", arch: "amd64", family: "dos"
>>>
>>> Gary
>>>
>>> On Mon, Sep 5, 2016 at 5:32 PM, Ralph Goers <ra...@dslextreme.com>
>>> wrote:
>>>
>>>> And you are building with Java 7?
>>>>
>>>> Ralph
>>>>
>>>> On Sep 5, 2016, at 2:18 PM, Gary Gregory <ga...@gmail.com>
>>>> wrote:
>>>>
>>>> Locally, I get:
>>>>
>>>> Failed tests:
>>>>   RoutingAppenderWithPurgingTest.routingTest:91 Incorrect number of
>>>> appenders with IdlePurgePolicy. expected:<3> but was:<1>
>>>>
>>>> Gary
>>>>
>>>> On Mon, Sep 5, 2016 at 12:54 PM, Ralph Goers <
>>>> ralph.goers@dslextreme.com> wrote:
>>>>
>>>>> For the record, I am voting -1 on this commit.  It breaks the build
>>>>> because the DisruptorBlockingQueueFactory has a dependency that requires
>>>>> Java 8. The 2.7 release is blocked until this is corrected.
>>>>>
>>>>> Ralph
>>>>>
>>>>> > On Sep 4, 2016, at 11:38 AM, mattsicker@apache.org wrote:
>>>>> >
>>>>> > Convert BlockingQueueFactory into a plugin element
>>>>> >
>>>>> > Related to LOG4J2-1430.
>>>>> >
>>>>> >
>>>>> > Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
>>>>> > Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit
>>>>> /65ec9bce
>>>>> > Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/6
>>>>> 5ec9bce
>>>>> > Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/6
>>>>> 5ec9bce
>>>>> >
>>>>> > Branch: refs/heads/master
>>>>> > Commit: 65ec9bcef74dc30ecab9c2091c6e0638d53490d8
>>>>> > Parents: 0848d7a
>>>>> > Author: Matt Sicker <bo...@gmail.com>
>>>>> > Authored: Fri Jun 17 18:51:08 2016 -0500
>>>>> > Committer: Matt Sicker <bo...@gmail.com>
>>>>> > Committed: Fri Jun 17 18:51:08 2016 -0500
>>>>> >
>>>>> > ------------------------------------------------------------
>>>>> ----------
>>>>> > .../log4j/core/appender/AsyncAppender.java      | 24 +++++++++---
>>>>> > .../core/async/ArrayBlockingQueueFactory.java   | 10 +++++
>>>>> > .../log4j/core/async/BlockingQueueFactory.java  | 13 ++++++-
>>>>> > .../async/DisruptorBlockingQueueFactory.java    | 11 +++++-
>>>>> > .../core/async/LinkedTransferQueueFactory.java  | 10 +++++
>>>>> > .../log4j/core/appender/AsyncAppenderTest.java  | 16 ++++----
>>>>> > .../BlockingQueueFactory-ArrayBlockingQueue.xml | 40
>>>>> ++++++++++++++++++++
>>>>> > ...ckingQueueFactory-DisruptorBlockingQueue.xml | 40
>>>>> ++++++++++++++++++++
>>>>> > ...BlockingQueueFactory-LinkedTransferQueue.xml | 40
>>>>> ++++++++++++++++++++
>>>>> > 9 files changed, 189 insertions(+), 15 deletions(-)
>>>>> > ------------------------------------------------------------
>>>>> ----------
>>>>> >
>>>>> >
>>>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>>>> 5ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/co
>>>>> re/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/app
>>>>> ender/AsyncAppender.java
>>>>> > index 3c9c37c..dee5e50 100644
>>>>> > --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/app
>>>>> ender/AsyncAppender.java
>>>>> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/app
>>>>> ender/AsyncAppender.java
>>>>> > @@ -26,8 +26,11 @@ 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;
>>>>> > +import org.apache.logging.log4j.core.async.ArrayBlockingQueueFactor
>>>>> y;
>>>>> > import org.apache.logging.log4j.core.async.AsyncQueueFullPolicy;
>>>>> > import org.apache.logging.log4j.core.async.AsyncQueueFullPolicyFact
>>>>> ory;
>>>>> > +import org.apache.logging.log4j.core.async.BlockingQueueFactory;
>>>>> > +import org.apache.logging.log4j.core.async.BlockingQueueFactoryUtil
>>>>> ;
>>>>> > import org.apache.logging.log4j.core.async.DiscardingAsyncQueueFull
>>>>> Policy;
>>>>> > import org.apache.logging.log4j.core.async.EventRoute;
>>>>> > import org.apache.logging.log4j.core.config.AppenderControl;
>>>>> > @@ -42,7 +45,6 @@ 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.validation.cons
>>>>> traints.Required;
>>>>> > import org.apache.logging.log4j.core.impl.Log4jLogEvent;
>>>>> > -import org.apache.logging.log4j.core.async.BlockingQueueFactoryUtil
>>>>> ;
>>>>> > import org.apache.logging.log4j.core.util.Constants;
>>>>> >
>>>>> > /**
>>>>> > @@ -73,8 +75,8 @@ public final class AsyncAppender extends
>>>>> AbstractAppender {
>>>>> >
>>>>> >     private AsyncAppender(final String name, final Filter filter,
>>>>> final AppenderRef[] appenderRefs,
>>>>> >                           final String errorRef, final int
>>>>> queueSize, final boolean blocking,
>>>>> > -                          final boolean ignoreExceptions,
>>>>> > -                          final long shutdownTimeout, final
>>>>> Configuration config, final boolean includeLocation) {
>>>>> > +                          final boolean ignoreExceptions, final
>>>>> long shutdownTimeout, final Configuration config,
>>>>> > +                          final boolean includeLocation, final
>>>>> BlockingQueueFactory<LogEvent> blockingQueueFactory) {
>>>>> >         super(name, filter, null, ignoreExceptions);
>>>>> >         this.queue = BlockingQueueFactoryUtil.<LogE
>>>>> vent>getBlockingQueueFactory().create(queueSize);
>>>>> >         this.queueSize = queueSize;
>>>>> > @@ -217,7 +219,9 @@ public final class AsyncAppender extends
>>>>> AbstractAppender {
>>>>> >     }
>>>>> >
>>>>> >     /**
>>>>> > -     * Create an AsyncAppender.
>>>>> > +     * Create an AsyncAppender. This method is retained for
>>>>> backwards compatibility. New code should use the
>>>>> > +     * {@link Builder} instead. This factory will use {@link
>>>>> ArrayBlockingQueueFactory} by default as was the behavior
>>>>> > +     * pre-2.7.
>>>>> >      *
>>>>> >      * @param appenderRefs     The Appenders to reference.
>>>>> >      * @param errorRef         An optional Appender to write to if
>>>>> the queue is full or other errors occur.
>>>>> > @@ -247,7 +251,7 @@ public final class AsyncAppender extends
>>>>> AbstractAppender {
>>>>> >         }
>>>>> >
>>>>> >         return new AsyncAppender(name, filter, appenderRefs,
>>>>> errorRef, size, blocking, ignoreExceptions,
>>>>> > -            shutdownTimeout, config, includeLocation);
>>>>> > +            shutdownTimeout, config, includeLocation, new
>>>>> ArrayBlockingQueueFactory<LogEvent>());
>>>>> >     }
>>>>> >
>>>>> >     @PluginBuilderFactory
>>>>> > @@ -290,6 +294,9 @@ public final class AsyncAppender extends
>>>>> AbstractAppender {
>>>>> >         @PluginBuilderAttribute
>>>>> >         private boolean ignoreExceptions = true;
>>>>> >
>>>>> > +        @PluginElement(BlockingQueueFactory.ELEMENT_TYPE)
>>>>> > +        private BlockingQueueFactory<LogEvent> blockingQueueFactory
>>>>> = new ArrayBlockingQueueFactory<>();
>>>>> > +
>>>>> >         public Builder setAppenderRefs(AppenderRef[] appenderRefs) {
>>>>> >             this.appenderRefs = appenderRefs;
>>>>> >             return this;
>>>>> > @@ -340,10 +347,15 @@ public final class AsyncAppender extends
>>>>> AbstractAppender {
>>>>> >             return this;
>>>>> >         }
>>>>> >
>>>>> > +        public Builder setBlockingQueueFactory(final
>>>>> BlockingQueueFactory<LogEvent> blockingQueueFactory) {
>>>>> > +            this.blockingQueueFactory = blockingQueueFactory;
>>>>> > +            return this;
>>>>> > +        }
>>>>> > +
>>>>> >         @Override
>>>>> >         public AsyncAppender build() {
>>>>> >             return new AsyncAppender(name, filter, appenderRefs,
>>>>> errorRef, bufferSize, blocking, ignoreExceptions,
>>>>> > -                shutdownTimeout, configuration, includeLocation);
>>>>> > +                shutdownTimeout, configuration, includeLocation,
>>>>> blockingQueueFactory);
>>>>> >         }
>>>>> >     }
>>>>> >
>>>>> >
>>>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>>>> 5ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/co
>>>>> re/async/ArrayBlockingQueueFactory.java
>>>>> > ------------------------------------------------------------
>>>>> ----------
>>>>> > diff --git a/log4j-core/src/main/java/org
>>>>> /apache/logging/log4j/core/async/ArrayBlockingQueueFactory.java
>>>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>> nc/ArrayBlockingQueueFactory.java
>>>>> > index e9c99b8..dcad78a 100644
>>>>> > --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>> nc/ArrayBlockingQueueFactory.java
>>>>> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>> nc/ArrayBlockingQueueFactory.java
>>>>> > @@ -3,14 +3,24 @@ package org.apache.logging.log4j.core.async;
>>>>> > import java.util.concurrent.ArrayBlockingQueue;
>>>>> > import java.util.concurrent.BlockingQueue;
>>>>> >
>>>>> > +import org.apache.logging.log4j.core.config.Node;
>>>>> > +import org.apache.logging.log4j.core.config.plugins.Plugin;
>>>>> > +import org.apache.logging.log4j.core.config.plugins.PluginFactory;
>>>>> > +
>>>>> > /**
>>>>> >  * Factory for creating instances of {@link ArrayBlockingQueue}.
>>>>> >  *
>>>>> >  * @since 2.7
>>>>> >  */
>>>>> > +@Plugin(name = "ArrayBlockingQueue", category = Node.CATEGORY,
>>>>> elementType = BlockingQueueFactory.ELEMENT_TYPE)
>>>>> > public class ArrayBlockingQueueFactory<E> implements
>>>>> BlockingQueueFactory<E> {
>>>>> >     @Override
>>>>> >     public BlockingQueue<E> create(int capacity) {
>>>>> >         return new ArrayBlockingQueue<>(capacity);
>>>>> >     }
>>>>> > +
>>>>> > +    @PluginFactory
>>>>> > +    public static <E> ArrayBlockingQueueFactory<E> createFactory() {
>>>>> > +        return new ArrayBlockingQueueFactory<>();
>>>>> > +    }
>>>>> > }
>>>>> >
>>>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>>>> 5ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/co
>>>>> re/async/BlockingQueueFactory.java
>>>>> > ------------------------------------------------------------
>>>>> ----------
>>>>> > diff --git a/log4j-core/src/main/java/org
>>>>> /apache/logging/log4j/core/async/BlockingQueueFactory.java
>>>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>> nc/BlockingQueueFactory.java
>>>>> > index ccd1625..5763d1e 100644
>>>>> > --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>> nc/BlockingQueueFactory.java
>>>>> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>> nc/BlockingQueueFactory.java
>>>>> > @@ -9,7 +9,18 @@ import java.util.concurrent.BlockingQueue;
>>>>> >  */
>>>>> > public interface BlockingQueueFactory<E> {
>>>>> >
>>>>> > -    String PROPERTY = "log4j.BlockingQueueFactory";
>>>>> > +    /**
>>>>> > +     * The {@link org.apache.logging.log4j.core.
>>>>> config.plugins.Plugin#elementType() element type} to use for plugins
>>>>> > +     * implementing this interface.
>>>>> > +     */
>>>>> > +    String ELEMENT_TYPE = "BlockingQueueFactory";
>>>>> >
>>>>> > +    /**
>>>>> > +     * Creates a new BlockingQueue with the specified maximum
>>>>> capacity. Note that not all implementations of
>>>>> > +     * BlockingQueue support a bounded capacity in which case the
>>>>> value is ignored.
>>>>> > +     *
>>>>> > +     * @param capacity maximum size of the queue if supported
>>>>> > +     * @return a new BlockingQueue
>>>>> > +     */
>>>>> >     BlockingQueue<E> create(int capacity);
>>>>> > }
>>>>> >
>>>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>>>> 5ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/co
>>>>> re/async/DisruptorBlockingQueueFactory.java
>>>>> > ------------------------------------------------------------
>>>>> ----------
>>>>> > diff --git a/log4j-core/src/main/java/org
>>>>> /apache/logging/log4j/core/async/DisruptorBlockingQueueFactory.java
>>>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>> nc/DisruptorBlockingQueueFactory.java
>>>>> > index 8fb3707..add375d 100644
>>>>> > --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>> nc/DisruptorBlockingQueueFactory.java
>>>>> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>> nc/DisruptorBlockingQueueFactory.java
>>>>> > @@ -3,15 +3,24 @@ package org.apache.logging.log4j.core.async;
>>>>> > import java.util.concurrent.BlockingQueue;
>>>>> >
>>>>> > import com.conversantmedia.util.concurrent.DisruptorBlockingQueue;
>>>>> > +import org.apache.logging.log4j.core.config.Node;
>>>>> > +import org.apache.logging.log4j.core.config.plugins.Plugin;
>>>>> > +import org.apache.logging.log4j.core.config.plugins.PluginFactory;
>>>>> >
>>>>> > /**
>>>>> >  * Factory for creating instances of {@link DisruptorBlockingQueue}.
>>>>> >  *
>>>>> >  * @since 2.7
>>>>> >  */
>>>>> > +@Plugin(name = "DisruptorBlockingQueue", category = Node.CATEGORY,
>>>>> elementType = BlockingQueueFactory.ELEMENT_TYPE)
>>>>> > public class DisruptorBlockingQueueFactory<E> implements
>>>>> BlockingQueueFactory<E> {
>>>>> >     @Override
>>>>> >     public BlockingQueue<E> create(int capacity) {
>>>>> > -        return new DisruptorBlockingQueue<E>(capacity);
>>>>> > +        return new DisruptorBlockingQueue<>(capacity);
>>>>> > +    }
>>>>> > +
>>>>> > +    @PluginFactory
>>>>> > +    public static <E> DisruptorBlockingQueueFactory<E>
>>>>> createFactory() {
>>>>> > +        return new DisruptorBlockingQueueFactory<>();
>>>>> >     }
>>>>> > }
>>>>> >
>>>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>>>> 5ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/co
>>>>> re/async/LinkedTransferQueueFactory.java
>>>>> > ------------------------------------------------------------
>>>>> ----------
>>>>> > diff --git a/log4j-core/src/main/java/org
>>>>> /apache/logging/log4j/core/async/LinkedTransferQueueFactory.java
>>>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>> nc/LinkedTransferQueueFactory.java
>>>>> > index 862fab3..6ab24e7 100644
>>>>> > --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>> nc/LinkedTransferQueueFactory.java
>>>>> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>>> nc/LinkedTransferQueueFactory.java
>>>>> > @@ -20,14 +20,24 @@ package org.apache.logging.log4j.core.async;
>>>>> > import java.util.concurrent.BlockingQueue;
>>>>> > import java.util.concurrent.LinkedTransferQueue;
>>>>> >
>>>>> > +import org.apache.logging.log4j.core.config.Node;
>>>>> > +import org.apache.logging.log4j.core.config.plugins.Plugin;
>>>>> > +import org.apache.logging.log4j.core.config.plugins.PluginFactory;
>>>>> > +
>>>>> > /**
>>>>> >  * Factory for creating instances of {@link LinkedTransferQueue}.
>>>>> >  *
>>>>> >  * @since 2.7
>>>>> >  */
>>>>> > +@Plugin(name = "LinkedTransferQueue", category = Node.CATEGORY,
>>>>> elementType = BlockingQueueFactory.ELEMENT_TYPE)
>>>>> > public class LinkedTransferQueueFactory<E> implements
>>>>> BlockingQueueFactory<E> {
>>>>> >     @Override
>>>>> >     public BlockingQueue<E> create(int capacity) {
>>>>> >         return new LinkedTransferQueue<>();
>>>>> >     }
>>>>> > +
>>>>> > +    @PluginFactory
>>>>> > +    public static <E> LinkedTransferQueueFactory<E> createFactory()
>>>>> {
>>>>> > +        return new LinkedTransferQueueFactory<>();
>>>>> > +    }
>>>>> > }
>>>>> >
>>>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>>>> 5ec9bce/log4j-core/src/test/java/org/apache/logging/log4j/co
>>>>> re/appender/AsyncAppenderTest.java
>>>>> > ------------------------------------------------------------
>>>>> ----------
>>>>> > diff --git a/log4j-core/src/test/java/org
>>>>> /apache/logging/log4j/core/appender/AsyncAppenderTest.java
>>>>> b/log4j-core/src/test/java/org/apache/logging/log4j/core/app
>>>>> ender/AsyncAppenderTest.java
>>>>> > index 3066f38..076fdd0 100644
>>>>> > --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/app
>>>>> ender/AsyncAppenderTest.java
>>>>> > +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/app
>>>>> ender/AsyncAppenderTest.java
>>>>> > @@ -41,19 +41,21 @@ import static org.junit.Assert.*;
>>>>> >  */
>>>>> > @RunWith(Parameterized.class)
>>>>> > public class AsyncAppenderTest {
>>>>> > -    private static final String CONFIG = "log4j-asynch.xml";
>>>>> >
>>>>> >     @Parameterized.Parameters
>>>>> >     public static Object[] data() {
>>>>> > -        return new Class<?>[]{
>>>>> > -            ArrayBlockingQueueFactory.class,
>>>>> > -            DisruptorBlockingQueueFactory.class,
>>>>> > -            LinkedTransferQueueFactory.class
>>>>> > +        return new String[]{
>>>>> > +            // default async config uses array blocking queue
>>>>> > +            "log4j-asynch.xml",
>>>>> > +            // override default blocking queue implementations
>>>>> > +            "BlockingQueueFactory-ArrayBlockingQueue.xml",
>>>>> > +            "BlockingQueueFactory-DisruptorBlockingQueue.xml",
>>>>> > +            "BlockingQueueFactory-LinkedTransferQueue.xml"
>>>>> >         };
>>>>> >     }
>>>>> >
>>>>> > -    public AsyncAppenderTest(final Class<? extends
>>>>> BlockingQueueFactory> factory) {
>>>>> > -        context = new LoggerContextRule(CONFIG).with
>>>>> SystemProperty(BlockingQueueFactory.PROPERTY, factory.getName());
>>>>> > +    public AsyncAppenderTest(final String configFileName) {
>>>>> > +        context = new LoggerContextRule(configFileName);
>>>>> >     }
>>>>> >
>>>>> >     @Rule
>>>>> >
>>>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>>>> 5ec9bce/log4j-core/src/test/resources/BlockingQueueFactory-A
>>>>> rrayBlockingQueue.xml
>>>>> > ------------------------------------------------------------
>>>>> ----------
>>>>> > diff --git a/log4j-core/src/test/resource
>>>>> s/BlockingQueueFactory-ArrayBlockingQueue.xml
>>>>> b/log4j-core/src/test/resources/BlockingQueueFactory-ArrayBl
>>>>> ockingQueue.xml
>>>>> > new file mode 100644
>>>>> > index 0000000..e8bbfa6
>>>>> > --- /dev/null
>>>>> > +++ b/log4j-core/src/test/resources/BlockingQueueFactory-ArrayBl
>>>>> ockingQueue.xml
>>>>> > @@ -0,0 +1,40 @@
>>>>> > +<?xml version="1.0" encoding="UTF-8"?>
>>>>> > +<!--
>>>>> > + Licensed to the Apache Software Foundation (ASF) under one or more
>>>>> > + contributor license agreements.  See the NOTICE file distributed
>>>>> with
>>>>> > + this work for additional information regarding copyright ownership.
>>>>> > + The ASF licenses this file to You under the Apache License,
>>>>> Version 2.0
>>>>> > + (the "License"); you may not use this file except in compliance
>>>>> with
>>>>> > + the License.  You may obtain a copy of the License at
>>>>> > +
>>>>> > +      http://www.apache.org/licenses/LICENSE-2.0
>>>>> > +
>>>>> > + Unless required by applicable law or agreed to in writing, software
>>>>> > + distributed under the License is distributed on an "AS IS" BASIS,
>>>>> > + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>>>>> implied.
>>>>> > + See the License for the specific language governing permissions and
>>>>> > + limitations under the License.
>>>>> > +
>>>>> > +-->
>>>>> > +<Configuration status="OFF" name="ArrayBlockingQueueFactory">
>>>>> > +
>>>>> > +  <Appenders>
>>>>> > +    <Console name="STDOUT">
>>>>> > +      <PatternLayout pattern="%m%n"/>
>>>>> > +    </Console>
>>>>> > +    <List name="List">
>>>>> > +      <PatternLayout pattern="%C %M %m"/>
>>>>> > +    </List>
>>>>> > +    <Async name="Async" includeLocation="true" error-ref="STDOUT">
>>>>> > +      <AppenderRef ref="List"/>
>>>>> > +      <ArrayBlockingQueue/>
>>>>> > +    </Async>
>>>>> > +  </Appenders>
>>>>> > +
>>>>> > +  <Loggers>
>>>>> > +    <Root level="debug">
>>>>> > +      <AppenderRef ref="Async"/>
>>>>> > +    </Root>
>>>>> > +  </Loggers>
>>>>> > +
>>>>> > +</Configuration>
>>>>> > \ No newline at end of file
>>>>> >
>>>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>>>> 5ec9bce/log4j-core/src/test/resources/BlockingQueueFactory-D
>>>>> isruptorBlockingQueue.xml
>>>>> > ------------------------------------------------------------
>>>>> ----------
>>>>> > diff --git a/log4j-core/src/test/resource
>>>>> s/BlockingQueueFactory-DisruptorBlockingQueue.xml
>>>>> b/log4j-core/src/test/resources/BlockingQueueFactory-Disrupt
>>>>> orBlockingQueue.xml
>>>>> > new file mode 100644
>>>>> > index 0000000..268cca7
>>>>> > --- /dev/null
>>>>> > +++ b/log4j-core/src/test/resources/BlockingQueueFactory-Disrupt
>>>>> orBlockingQueue.xml
>>>>> > @@ -0,0 +1,40 @@
>>>>> > +<?xml version="1.0" encoding="UTF-8"?>
>>>>> > +<!--
>>>>> > + Licensed to the Apache Software Foundation (ASF) under one or more
>>>>> > + contributor license agreements.  See the NOTICE file distributed
>>>>> with
>>>>> > + this work for additional information regarding copyright ownership.
>>>>> > + The ASF licenses this file to You under the Apache License,
>>>>> Version 2.0
>>>>> > + (the "License"); you may not use this file except in compliance
>>>>> with
>>>>> > + the License.  You may obtain a copy of the License at
>>>>> > +
>>>>> > +      http://www.apache.org/licenses/LICENSE-2.0
>>>>> > +
>>>>> > + Unless required by applicable law or agreed to in writing, software
>>>>> > + distributed under the License is distributed on an "AS IS" BASIS,
>>>>> > + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>>>>> implied.
>>>>> > + See the License for the specific language governing permissions and
>>>>> > + limitations under the License.
>>>>> > +
>>>>> > +-->
>>>>> > +<Configuration status="OFF" name="DisruptorBlockingQueueFactory">
>>>>> > +
>>>>> > +  <Appenders>
>>>>> > +    <Console name="STDOUT">
>>>>> > +      <PatternLayout pattern="%m%n"/>
>>>>> > +    </Console>
>>>>> > +    <List name="List">
>>>>> > +      <PatternLayout pattern="%C %M %m"/>
>>>>> > +    </List>
>>>>> > +    <Async name="Async" includeLocation="true" error-ref="STDOUT">
>>>>> > +      <AppenderRef ref="List"/>
>>>>> > +      <DisruptorBlockingQueue/>
>>>>> > +    </Async>
>>>>> > +  </Appenders>
>>>>> > +
>>>>> > +  <Loggers>
>>>>> > +    <Root level="debug">
>>>>> > +      <AppenderRef ref="Async"/>
>>>>> > +    </Root>
>>>>> > +  </Loggers>
>>>>> > +
>>>>> > +</Configuration>
>>>>> > \ No newline at end of file
>>>>> >
>>>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>>>> 5ec9bce/log4j-core/src/test/resources/BlockingQueueFactory-L
>>>>> inkedTransferQueue.xml
>>>>> > ------------------------------------------------------------
>>>>> ----------
>>>>> > diff --git a/log4j-core/src/test/resource
>>>>> s/BlockingQueueFactory-LinkedTransferQueue.xml
>>>>> b/log4j-core/src/test/resources/BlockingQueueFactory-LinkedT
>>>>> ransferQueue.xml
>>>>> > new file mode 100644
>>>>> > index 0000000..13063d3
>>>>> > --- /dev/null
>>>>> > +++ b/log4j-core/src/test/resources/BlockingQueueFactory-LinkedT
>>>>> ransferQueue.xml
>>>>> > @@ -0,0 +1,40 @@
>>>>> > +<?xml version="1.0" encoding="UTF-8"?>
>>>>> > +<!--
>>>>> > + Licensed to the Apache Software Foundation (ASF) under one or more
>>>>> > + contributor license agreements.  See the NOTICE file distributed
>>>>> with
>>>>> > + this work for additional information regarding copyright ownership.
>>>>> > + The ASF licenses this file to You under the Apache License,
>>>>> Version 2.0
>>>>> > + (the "License"); you may not use this file except in compliance
>>>>> with
>>>>> > + the License.  You may obtain a copy of the License at
>>>>> > +
>>>>> > +      http://www.apache.org/licenses/LICENSE-2.0
>>>>> > +
>>>>> > + Unless required by applicable law or agreed to in writing, software
>>>>> > + distributed under the License is distributed on an "AS IS" BASIS,
>>>>> > + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>>>>> implied.
>>>>> > + See the License for the specific language governing permissions and
>>>>> > + limitations under the License.
>>>>> > +
>>>>> > +-->
>>>>> > +<Configuration status="OFF" name="LinkedTransferQueueFactory">
>>>>> > +
>>>>> > +  <Appenders>
>>>>> > +    <Console name="STDOUT">
>>>>> > +      <PatternLayout pattern="%m%n"/>
>>>>> > +    </Console>
>>>>> > +    <List name="List">
>>>>> > +      <PatternLayout pattern="%C %M %m"/>
>>>>> > +    </List>
>>>>> > +    <Async name="Async" includeLocation="true" error-ref="STDOUT">
>>>>> > +      <AppenderRef ref="List"/>
>>>>> > +      <LinkedTransferQueue/>
>>>>> > +    </Async>
>>>>> > +  </Appenders>
>>>>> > +
>>>>> > +  <Loggers>
>>>>> > +    <Root level="debug">
>>>>> > +      <AppenderRef ref="Async"/>
>>>>> > +    </Root>
>>>>> > +  </Loggers>
>>>>> > +
>>>>> > +</Configuration>
>>>>> > \ No newline at end of file
>>>>> >
>>>>> >
>>>>>
>>>>>
>>>>>
>>>>> ---------------------------------------------------------------------
>>>>> To unsubscribe, e-mail: log4j-dev-unsubscribe@logging.apache.org
>>>>> For additional commands, e-mail: log4j-dev-help@logging.apache.org
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>> 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
>>>>
>>>>
>>>>
>>>
>>>
>>> --
>>> 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
>>>
>>>
>>>
>>
>>
>> --
>> Matt Sicker <bo...@gmail.com>
>>
>
>
>
> --
> Matt Sicker <bo...@gmail.com>
>

Re: [13/36] logging-log4j2 git commit: Convert BlockingQueueFactory into a plugin element

Posted by Matt Sicker <bo...@gmail.com>.
I can't believe I didn't notice it, but the Conversant library does require
Java 8. It's an optional dependency, so what to do? We can build on Java 8
with a target for Java 7 and use the animal-sniffer Maven plugin to make
sure we don't accidentally use anything from Java 8.

On 5 September 2016 at 22:45, Matt Sicker <bo...@gmail.com> wrote:

> It looks like I may have merged prematurely then. I think I've been
> running builds using Java 8 as well and didn't notice this. Jenkins isn't
> even loading for me, so I can't see what the problem is on there. I'll take
> a look at this tomorrow, and if I can't fix the dependency issue, I'll back
> out part of this feature for now.
>
> On 5 September 2016 at 17:03, Ralph Goers <ra...@dslextreme.com>
> wrote:
>
>> Jenkins and the release builds use Java 7, so you should certainly use
>> Java 7 from time to time.
>>
>> Ralph
>>
>> On Sep 5, 2016, at 2:33 PM, Gary Gregory <ga...@gmail.com> wrote:
>>
>> Ah, no, Java 8:
>>
>> Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5;
>> 2015-11-10T08:41:47-08:00)
>> Maven home: E:\Java\apache-maven-3.3.9
>> Java version: 1.8.0_101, vendor: Oracle Corporation
>> Java home: C:\Program Files\Java\jdk1.8.0_101\jre
>> Default locale: en_US, platform encoding: Cp1252
>> OS name: "windows 7", version: "6.1", arch: "amd64", family: "dos"
>>
>> Gary
>>
>> On Mon, Sep 5, 2016 at 5:32 PM, Ralph Goers <ra...@dslextreme.com>
>> wrote:
>>
>>> And you are building with Java 7?
>>>
>>> Ralph
>>>
>>> On Sep 5, 2016, at 2:18 PM, Gary Gregory <ga...@gmail.com> wrote:
>>>
>>> Locally, I get:
>>>
>>> Failed tests:
>>>   RoutingAppenderWithPurgingTest.routingTest:91 Incorrect number of
>>> appenders with IdlePurgePolicy. expected:<3> but was:<1>
>>>
>>> Gary
>>>
>>> On Mon, Sep 5, 2016 at 12:54 PM, Ralph Goers <ralph.goers@dslextreme.com
>>> > wrote:
>>>
>>>> For the record, I am voting -1 on this commit.  It breaks the build
>>>> because the DisruptorBlockingQueueFactory has a dependency that requires
>>>> Java 8. The 2.7 release is blocked until this is corrected.
>>>>
>>>> Ralph
>>>>
>>>> > On Sep 4, 2016, at 11:38 AM, mattsicker@apache.org wrote:
>>>> >
>>>> > Convert BlockingQueueFactory into a plugin element
>>>> >
>>>> > Related to LOG4J2-1430.
>>>> >
>>>> >
>>>> > Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
>>>> > Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit
>>>> /65ec9bce
>>>> > Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/6
>>>> 5ec9bce
>>>> > Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/6
>>>> 5ec9bce
>>>> >
>>>> > Branch: refs/heads/master
>>>> > Commit: 65ec9bcef74dc30ecab9c2091c6e0638d53490d8
>>>> > Parents: 0848d7a
>>>> > Author: Matt Sicker <bo...@gmail.com>
>>>> > Authored: Fri Jun 17 18:51:08 2016 -0500
>>>> > Committer: Matt Sicker <bo...@gmail.com>
>>>> > Committed: Fri Jun 17 18:51:08 2016 -0500
>>>> >
>>>> > ------------------------------------------------------------
>>>> ----------
>>>> > .../log4j/core/appender/AsyncAppender.java      | 24 +++++++++---
>>>> > .../core/async/ArrayBlockingQueueFactory.java   | 10 +++++
>>>> > .../log4j/core/async/BlockingQueueFactory.java  | 13 ++++++-
>>>> > .../async/DisruptorBlockingQueueFactory.java    | 11 +++++-
>>>> > .../core/async/LinkedTransferQueueFactory.java  | 10 +++++
>>>> > .../log4j/core/appender/AsyncAppenderTest.java  | 16 ++++----
>>>> > .../BlockingQueueFactory-ArrayBlockingQueue.xml | 40
>>>> ++++++++++++++++++++
>>>> > ...ckingQueueFactory-DisruptorBlockingQueue.xml | 40
>>>> ++++++++++++++++++++
>>>> > ...BlockingQueueFactory-LinkedTransferQueue.xml | 40
>>>> ++++++++++++++++++++
>>>> > 9 files changed, 189 insertions(+), 15 deletions(-)
>>>> > ------------------------------------------------------------
>>>> ----------
>>>> >
>>>> >
>>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>>> 5ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/co
>>>> re/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/app
>>>> ender/AsyncAppender.java
>>>> > index 3c9c37c..dee5e50 100644
>>>> > --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/app
>>>> ender/AsyncAppender.java
>>>> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/app
>>>> ender/AsyncAppender.java
>>>> > @@ -26,8 +26,11 @@ 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;
>>>> > +import org.apache.logging.log4j.core.async.ArrayBlockingQueueFactor
>>>> y;
>>>> > import org.apache.logging.log4j.core.async.AsyncQueueFullPolicy;
>>>> > import org.apache.logging.log4j.core.async.AsyncQueueFullPolicyFact
>>>> ory;
>>>> > +import org.apache.logging.log4j.core.async.BlockingQueueFactory;
>>>> > +import org.apache.logging.log4j.core.async.BlockingQueueFactoryUtil;
>>>> > import org.apache.logging.log4j.core.async.DiscardingAsyncQueueFull
>>>> Policy;
>>>> > import org.apache.logging.log4j.core.async.EventRoute;
>>>> > import org.apache.logging.log4j.core.config.AppenderControl;
>>>> > @@ -42,7 +45,6 @@ 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.validation.cons
>>>> traints.Required;
>>>> > import org.apache.logging.log4j.core.impl.Log4jLogEvent;
>>>> > -import org.apache.logging.log4j.core.async.BlockingQueueFactoryUtil;
>>>> > import org.apache.logging.log4j.core.util.Constants;
>>>> >
>>>> > /**
>>>> > @@ -73,8 +75,8 @@ public final class AsyncAppender extends
>>>> AbstractAppender {
>>>> >
>>>> >     private AsyncAppender(final String name, final Filter filter,
>>>> final AppenderRef[] appenderRefs,
>>>> >                           final String errorRef, final int queueSize,
>>>> final boolean blocking,
>>>> > -                          final boolean ignoreExceptions,
>>>> > -                          final long shutdownTimeout, final
>>>> Configuration config, final boolean includeLocation) {
>>>> > +                          final boolean ignoreExceptions, final long
>>>> shutdownTimeout, final Configuration config,
>>>> > +                          final boolean includeLocation, final
>>>> BlockingQueueFactory<LogEvent> blockingQueueFactory) {
>>>> >         super(name, filter, null, ignoreExceptions);
>>>> >         this.queue = BlockingQueueFactoryUtil.<LogE
>>>> vent>getBlockingQueueFactory().create(queueSize);
>>>> >         this.queueSize = queueSize;
>>>> > @@ -217,7 +219,9 @@ public final class AsyncAppender extends
>>>> AbstractAppender {
>>>> >     }
>>>> >
>>>> >     /**
>>>> > -     * Create an AsyncAppender.
>>>> > +     * Create an AsyncAppender. This method is retained for
>>>> backwards compatibility. New code should use the
>>>> > +     * {@link Builder} instead. This factory will use {@link
>>>> ArrayBlockingQueueFactory} by default as was the behavior
>>>> > +     * pre-2.7.
>>>> >      *
>>>> >      * @param appenderRefs     The Appenders to reference.
>>>> >      * @param errorRef         An optional Appender to write to if
>>>> the queue is full or other errors occur.
>>>> > @@ -247,7 +251,7 @@ public final class AsyncAppender extends
>>>> AbstractAppender {
>>>> >         }
>>>> >
>>>> >         return new AsyncAppender(name, filter, appenderRefs,
>>>> errorRef, size, blocking, ignoreExceptions,
>>>> > -            shutdownTimeout, config, includeLocation);
>>>> > +            shutdownTimeout, config, includeLocation, new
>>>> ArrayBlockingQueueFactory<LogEvent>());
>>>> >     }
>>>> >
>>>> >     @PluginBuilderFactory
>>>> > @@ -290,6 +294,9 @@ public final class AsyncAppender extends
>>>> AbstractAppender {
>>>> >         @PluginBuilderAttribute
>>>> >         private boolean ignoreExceptions = true;
>>>> >
>>>> > +        @PluginElement(BlockingQueueFactory.ELEMENT_TYPE)
>>>> > +        private BlockingQueueFactory<LogEvent> blockingQueueFactory
>>>> = new ArrayBlockingQueueFactory<>();
>>>> > +
>>>> >         public Builder setAppenderRefs(AppenderRef[] appenderRefs) {
>>>> >             this.appenderRefs = appenderRefs;
>>>> >             return this;
>>>> > @@ -340,10 +347,15 @@ public final class AsyncAppender extends
>>>> AbstractAppender {
>>>> >             return this;
>>>> >         }
>>>> >
>>>> > +        public Builder setBlockingQueueFactory(final
>>>> BlockingQueueFactory<LogEvent> blockingQueueFactory) {
>>>> > +            this.blockingQueueFactory = blockingQueueFactory;
>>>> > +            return this;
>>>> > +        }
>>>> > +
>>>> >         @Override
>>>> >         public AsyncAppender build() {
>>>> >             return new AsyncAppender(name, filter, appenderRefs,
>>>> errorRef, bufferSize, blocking, ignoreExceptions,
>>>> > -                shutdownTimeout, configuration, includeLocation);
>>>> > +                shutdownTimeout, configuration, includeLocation,
>>>> blockingQueueFactory);
>>>> >         }
>>>> >     }
>>>> >
>>>> >
>>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>>> 5ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/co
>>>> re/async/ArrayBlockingQueueFactory.java
>>>> > ------------------------------------------------------------
>>>> ----------
>>>> > diff --git a/log4j-core/src/main/java/org
>>>> /apache/logging/log4j/core/async/ArrayBlockingQueueFactory.java
>>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>> nc/ArrayBlockingQueueFactory.java
>>>> > index e9c99b8..dcad78a 100644
>>>> > --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>> nc/ArrayBlockingQueueFactory.java
>>>> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>> nc/ArrayBlockingQueueFactory.java
>>>> > @@ -3,14 +3,24 @@ package org.apache.logging.log4j.core.async;
>>>> > import java.util.concurrent.ArrayBlockingQueue;
>>>> > import java.util.concurrent.BlockingQueue;
>>>> >
>>>> > +import org.apache.logging.log4j.core.config.Node;
>>>> > +import org.apache.logging.log4j.core.config.plugins.Plugin;
>>>> > +import org.apache.logging.log4j.core.config.plugins.PluginFactory;
>>>> > +
>>>> > /**
>>>> >  * Factory for creating instances of {@link ArrayBlockingQueue}.
>>>> >  *
>>>> >  * @since 2.7
>>>> >  */
>>>> > +@Plugin(name = "ArrayBlockingQueue", category = Node.CATEGORY,
>>>> elementType = BlockingQueueFactory.ELEMENT_TYPE)
>>>> > public class ArrayBlockingQueueFactory<E> implements
>>>> BlockingQueueFactory<E> {
>>>> >     @Override
>>>> >     public BlockingQueue<E> create(int capacity) {
>>>> >         return new ArrayBlockingQueue<>(capacity);
>>>> >     }
>>>> > +
>>>> > +    @PluginFactory
>>>> > +    public static <E> ArrayBlockingQueueFactory<E> createFactory() {
>>>> > +        return new ArrayBlockingQueueFactory<>();
>>>> > +    }
>>>> > }
>>>> >
>>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>>> 5ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/co
>>>> re/async/BlockingQueueFactory.java
>>>> > ------------------------------------------------------------
>>>> ----------
>>>> > diff --git a/log4j-core/src/main/java/org
>>>> /apache/logging/log4j/core/async/BlockingQueueFactory.java
>>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>> nc/BlockingQueueFactory.java
>>>> > index ccd1625..5763d1e 100644
>>>> > --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>> nc/BlockingQueueFactory.java
>>>> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>> nc/BlockingQueueFactory.java
>>>> > @@ -9,7 +9,18 @@ import java.util.concurrent.BlockingQueue;
>>>> >  */
>>>> > public interface BlockingQueueFactory<E> {
>>>> >
>>>> > -    String PROPERTY = "log4j.BlockingQueueFactory";
>>>> > +    /**
>>>> > +     * The {@link org.apache.logging.log4j.core.
>>>> config.plugins.Plugin#elementType() element type} to use for plugins
>>>> > +     * implementing this interface.
>>>> > +     */
>>>> > +    String ELEMENT_TYPE = "BlockingQueueFactory";
>>>> >
>>>> > +    /**
>>>> > +     * Creates a new BlockingQueue with the specified maximum
>>>> capacity. Note that not all implementations of
>>>> > +     * BlockingQueue support a bounded capacity in which case the
>>>> value is ignored.
>>>> > +     *
>>>> > +     * @param capacity maximum size of the queue if supported
>>>> > +     * @return a new BlockingQueue
>>>> > +     */
>>>> >     BlockingQueue<E> create(int capacity);
>>>> > }
>>>> >
>>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>>> 5ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/co
>>>> re/async/DisruptorBlockingQueueFactory.java
>>>> > ------------------------------------------------------------
>>>> ----------
>>>> > diff --git a/log4j-core/src/main/java/org
>>>> /apache/logging/log4j/core/async/DisruptorBlockingQueueFactory.java
>>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>> nc/DisruptorBlockingQueueFactory.java
>>>> > index 8fb3707..add375d 100644
>>>> > --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>> nc/DisruptorBlockingQueueFactory.java
>>>> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>> nc/DisruptorBlockingQueueFactory.java
>>>> > @@ -3,15 +3,24 @@ package org.apache.logging.log4j.core.async;
>>>> > import java.util.concurrent.BlockingQueue;
>>>> >
>>>> > import com.conversantmedia.util.concurrent.DisruptorBlockingQueue;
>>>> > +import org.apache.logging.log4j.core.config.Node;
>>>> > +import org.apache.logging.log4j.core.config.plugins.Plugin;
>>>> > +import org.apache.logging.log4j.core.config.plugins.PluginFactory;
>>>> >
>>>> > /**
>>>> >  * Factory for creating instances of {@link DisruptorBlockingQueue}.
>>>> >  *
>>>> >  * @since 2.7
>>>> >  */
>>>> > +@Plugin(name = "DisruptorBlockingQueue", category = Node.CATEGORY,
>>>> elementType = BlockingQueueFactory.ELEMENT_TYPE)
>>>> > public class DisruptorBlockingQueueFactory<E> implements
>>>> BlockingQueueFactory<E> {
>>>> >     @Override
>>>> >     public BlockingQueue<E> create(int capacity) {
>>>> > -        return new DisruptorBlockingQueue<E>(capacity);
>>>> > +        return new DisruptorBlockingQueue<>(capacity);
>>>> > +    }
>>>> > +
>>>> > +    @PluginFactory
>>>> > +    public static <E> DisruptorBlockingQueueFactory<E>
>>>> createFactory() {
>>>> > +        return new DisruptorBlockingQueueFactory<>();
>>>> >     }
>>>> > }
>>>> >
>>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>>> 5ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/co
>>>> re/async/LinkedTransferQueueFactory.java
>>>> > ------------------------------------------------------------
>>>> ----------
>>>> > diff --git a/log4j-core/src/main/java/org
>>>> /apache/logging/log4j/core/async/LinkedTransferQueueFactory.java
>>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>> nc/LinkedTransferQueueFactory.java
>>>> > index 862fab3..6ab24e7 100644
>>>> > --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>> nc/LinkedTransferQueueFactory.java
>>>> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>>> nc/LinkedTransferQueueFactory.java
>>>> > @@ -20,14 +20,24 @@ package org.apache.logging.log4j.core.async;
>>>> > import java.util.concurrent.BlockingQueue;
>>>> > import java.util.concurrent.LinkedTransferQueue;
>>>> >
>>>> > +import org.apache.logging.log4j.core.config.Node;
>>>> > +import org.apache.logging.log4j.core.config.plugins.Plugin;
>>>> > +import org.apache.logging.log4j.core.config.plugins.PluginFactory;
>>>> > +
>>>> > /**
>>>> >  * Factory for creating instances of {@link LinkedTransferQueue}.
>>>> >  *
>>>> >  * @since 2.7
>>>> >  */
>>>> > +@Plugin(name = "LinkedTransferQueue", category = Node.CATEGORY,
>>>> elementType = BlockingQueueFactory.ELEMENT_TYPE)
>>>> > public class LinkedTransferQueueFactory<E> implements
>>>> BlockingQueueFactory<E> {
>>>> >     @Override
>>>> >     public BlockingQueue<E> create(int capacity) {
>>>> >         return new LinkedTransferQueue<>();
>>>> >     }
>>>> > +
>>>> > +    @PluginFactory
>>>> > +    public static <E> LinkedTransferQueueFactory<E> createFactory() {
>>>> > +        return new LinkedTransferQueueFactory<>();
>>>> > +    }
>>>> > }
>>>> >
>>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>>> 5ec9bce/log4j-core/src/test/java/org/apache/logging/log4j/co
>>>> re/appender/AsyncAppenderTest.java
>>>> > ------------------------------------------------------------
>>>> ----------
>>>> > diff --git a/log4j-core/src/test/java/org
>>>> /apache/logging/log4j/core/appender/AsyncAppenderTest.java
>>>> b/log4j-core/src/test/java/org/apache/logging/log4j/core/app
>>>> ender/AsyncAppenderTest.java
>>>> > index 3066f38..076fdd0 100644
>>>> > --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/app
>>>> ender/AsyncAppenderTest.java
>>>> > +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/app
>>>> ender/AsyncAppenderTest.java
>>>> > @@ -41,19 +41,21 @@ import static org.junit.Assert.*;
>>>> >  */
>>>> > @RunWith(Parameterized.class)
>>>> > public class AsyncAppenderTest {
>>>> > -    private static final String CONFIG = "log4j-asynch.xml";
>>>> >
>>>> >     @Parameterized.Parameters
>>>> >     public static Object[] data() {
>>>> > -        return new Class<?>[]{
>>>> > -            ArrayBlockingQueueFactory.class,
>>>> > -            DisruptorBlockingQueueFactory.class,
>>>> > -            LinkedTransferQueueFactory.class
>>>> > +        return new String[]{
>>>> > +            // default async config uses array blocking queue
>>>> > +            "log4j-asynch.xml",
>>>> > +            // override default blocking queue implementations
>>>> > +            "BlockingQueueFactory-ArrayBlockingQueue.xml",
>>>> > +            "BlockingQueueFactory-DisruptorBlockingQueue.xml",
>>>> > +            "BlockingQueueFactory-LinkedTransferQueue.xml"
>>>> >         };
>>>> >     }
>>>> >
>>>> > -    public AsyncAppenderTest(final Class<? extends
>>>> BlockingQueueFactory> factory) {
>>>> > -        context = new LoggerContextRule(CONFIG).with
>>>> SystemProperty(BlockingQueueFactory.PROPERTY, factory.getName());
>>>> > +    public AsyncAppenderTest(final String configFileName) {
>>>> > +        context = new LoggerContextRule(configFileName);
>>>> >     }
>>>> >
>>>> >     @Rule
>>>> >
>>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>>> 5ec9bce/log4j-core/src/test/resources/BlockingQueueFactory-A
>>>> rrayBlockingQueue.xml
>>>> > ------------------------------------------------------------
>>>> ----------
>>>> > diff --git a/log4j-core/src/test/resource
>>>> s/BlockingQueueFactory-ArrayBlockingQueue.xml
>>>> b/log4j-core/src/test/resources/BlockingQueueFactory-ArrayBl
>>>> ockingQueue.xml
>>>> > new file mode 100644
>>>> > index 0000000..e8bbfa6
>>>> > --- /dev/null
>>>> > +++ b/log4j-core/src/test/resources/BlockingQueueFactory-ArrayBl
>>>> ockingQueue.xml
>>>> > @@ -0,0 +1,40 @@
>>>> > +<?xml version="1.0" encoding="UTF-8"?>
>>>> > +<!--
>>>> > + Licensed to the Apache Software Foundation (ASF) under one or more
>>>> > + contributor license agreements.  See the NOTICE file distributed
>>>> with
>>>> > + this work for additional information regarding copyright ownership.
>>>> > + The ASF licenses this file to You under the Apache License, Version
>>>> 2.0
>>>> > + (the "License"); you may not use this file except in compliance with
>>>> > + the License.  You may obtain a copy of the License at
>>>> > +
>>>> > +      http://www.apache.org/licenses/LICENSE-2.0
>>>> > +
>>>> > + Unless required by applicable law or agreed to in writing, software
>>>> > + distributed under the License is distributed on an "AS IS" BASIS,
>>>> > + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>>>> implied.
>>>> > + See the License for the specific language governing permissions and
>>>> > + limitations under the License.
>>>> > +
>>>> > +-->
>>>> > +<Configuration status="OFF" name="ArrayBlockingQueueFactory">
>>>> > +
>>>> > +  <Appenders>
>>>> > +    <Console name="STDOUT">
>>>> > +      <PatternLayout pattern="%m%n"/>
>>>> > +    </Console>
>>>> > +    <List name="List">
>>>> > +      <PatternLayout pattern="%C %M %m"/>
>>>> > +    </List>
>>>> > +    <Async name="Async" includeLocation="true" error-ref="STDOUT">
>>>> > +      <AppenderRef ref="List"/>
>>>> > +      <ArrayBlockingQueue/>
>>>> > +    </Async>
>>>> > +  </Appenders>
>>>> > +
>>>> > +  <Loggers>
>>>> > +    <Root level="debug">
>>>> > +      <AppenderRef ref="Async"/>
>>>> > +    </Root>
>>>> > +  </Loggers>
>>>> > +
>>>> > +</Configuration>
>>>> > \ No newline at end of file
>>>> >
>>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>>> 5ec9bce/log4j-core/src/test/resources/BlockingQueueFactory-D
>>>> isruptorBlockingQueue.xml
>>>> > ------------------------------------------------------------
>>>> ----------
>>>> > diff --git a/log4j-core/src/test/resource
>>>> s/BlockingQueueFactory-DisruptorBlockingQueue.xml
>>>> b/log4j-core/src/test/resources/BlockingQueueFactory-Disrupt
>>>> orBlockingQueue.xml
>>>> > new file mode 100644
>>>> > index 0000000..268cca7
>>>> > --- /dev/null
>>>> > +++ b/log4j-core/src/test/resources/BlockingQueueFactory-Disrupt
>>>> orBlockingQueue.xml
>>>> > @@ -0,0 +1,40 @@
>>>> > +<?xml version="1.0" encoding="UTF-8"?>
>>>> > +<!--
>>>> > + Licensed to the Apache Software Foundation (ASF) under one or more
>>>> > + contributor license agreements.  See the NOTICE file distributed
>>>> with
>>>> > + this work for additional information regarding copyright ownership.
>>>> > + The ASF licenses this file to You under the Apache License, Version
>>>> 2.0
>>>> > + (the "License"); you may not use this file except in compliance with
>>>> > + the License.  You may obtain a copy of the License at
>>>> > +
>>>> > +      http://www.apache.org/licenses/LICENSE-2.0
>>>> > +
>>>> > + Unless required by applicable law or agreed to in writing, software
>>>> > + distributed under the License is distributed on an "AS IS" BASIS,
>>>> > + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>>>> implied.
>>>> > + See the License for the specific language governing permissions and
>>>> > + limitations under the License.
>>>> > +
>>>> > +-->
>>>> > +<Configuration status="OFF" name="DisruptorBlockingQueueFactory">
>>>> > +
>>>> > +  <Appenders>
>>>> > +    <Console name="STDOUT">
>>>> > +      <PatternLayout pattern="%m%n"/>
>>>> > +    </Console>
>>>> > +    <List name="List">
>>>> > +      <PatternLayout pattern="%C %M %m"/>
>>>> > +    </List>
>>>> > +    <Async name="Async" includeLocation="true" error-ref="STDOUT">
>>>> > +      <AppenderRef ref="List"/>
>>>> > +      <DisruptorBlockingQueue/>
>>>> > +    </Async>
>>>> > +  </Appenders>
>>>> > +
>>>> > +  <Loggers>
>>>> > +    <Root level="debug">
>>>> > +      <AppenderRef ref="Async"/>
>>>> > +    </Root>
>>>> > +  </Loggers>
>>>> > +
>>>> > +</Configuration>
>>>> > \ No newline at end of file
>>>> >
>>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>>> 5ec9bce/log4j-core/src/test/resources/BlockingQueueFactory-L
>>>> inkedTransferQueue.xml
>>>> > ------------------------------------------------------------
>>>> ----------
>>>> > diff --git a/log4j-core/src/test/resource
>>>> s/BlockingQueueFactory-LinkedTransferQueue.xml
>>>> b/log4j-core/src/test/resources/BlockingQueueFactory-LinkedT
>>>> ransferQueue.xml
>>>> > new file mode 100644
>>>> > index 0000000..13063d3
>>>> > --- /dev/null
>>>> > +++ b/log4j-core/src/test/resources/BlockingQueueFactory-LinkedT
>>>> ransferQueue.xml
>>>> > @@ -0,0 +1,40 @@
>>>> > +<?xml version="1.0" encoding="UTF-8"?>
>>>> > +<!--
>>>> > + Licensed to the Apache Software Foundation (ASF) under one or more
>>>> > + contributor license agreements.  See the NOTICE file distributed
>>>> with
>>>> > + this work for additional information regarding copyright ownership.
>>>> > + The ASF licenses this file to You under the Apache License, Version
>>>> 2.0
>>>> > + (the "License"); you may not use this file except in compliance with
>>>> > + the License.  You may obtain a copy of the License at
>>>> > +
>>>> > +      http://www.apache.org/licenses/LICENSE-2.0
>>>> > +
>>>> > + Unless required by applicable law or agreed to in writing, software
>>>> > + distributed under the License is distributed on an "AS IS" BASIS,
>>>> > + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>>>> implied.
>>>> > + See the License for the specific language governing permissions and
>>>> > + limitations under the License.
>>>> > +
>>>> > +-->
>>>> > +<Configuration status="OFF" name="LinkedTransferQueueFactory">
>>>> > +
>>>> > +  <Appenders>
>>>> > +    <Console name="STDOUT">
>>>> > +      <PatternLayout pattern="%m%n"/>
>>>> > +    </Console>
>>>> > +    <List name="List">
>>>> > +      <PatternLayout pattern="%C %M %m"/>
>>>> > +    </List>
>>>> > +    <Async name="Async" includeLocation="true" error-ref="STDOUT">
>>>> > +      <AppenderRef ref="List"/>
>>>> > +      <LinkedTransferQueue/>
>>>> > +    </Async>
>>>> > +  </Appenders>
>>>> > +
>>>> > +  <Loggers>
>>>> > +    <Root level="debug">
>>>> > +      <AppenderRef ref="Async"/>
>>>> > +    </Root>
>>>> > +  </Loggers>
>>>> > +
>>>> > +</Configuration>
>>>> > \ No newline at end of file
>>>> >
>>>> >
>>>>
>>>>
>>>>
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: log4j-dev-unsubscribe@logging.apache.org
>>>> For additional commands, e-mail: log4j-dev-help@logging.apache.org
>>>>
>>>>
>>>
>>>
>>> --
>>> 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
>>>
>>>
>>>
>>
>>
>> --
>> 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
>>
>>
>>
>
>
> --
> Matt Sicker <bo...@gmail.com>
>



-- 
Matt Sicker <bo...@gmail.com>

Re: [13/36] logging-log4j2 git commit: Convert BlockingQueueFactory into a plugin element

Posted by Matt Sicker <bo...@gmail.com>.
It looks like I may have merged prematurely then. I think I've been running
builds using Java 8 as well and didn't notice this. Jenkins isn't even
loading for me, so I can't see what the problem is on there. I'll take a
look at this tomorrow, and if I can't fix the dependency issue, I'll back
out part of this feature for now.

On 5 September 2016 at 17:03, Ralph Goers <ra...@dslextreme.com>
wrote:

> Jenkins and the release builds use Java 7, so you should certainly use
> Java 7 from time to time.
>
> Ralph
>
> On Sep 5, 2016, at 2:33 PM, Gary Gregory <ga...@gmail.com> wrote:
>
> Ah, no, Java 8:
>
> Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5;
> 2015-11-10T08:41:47-08:00)
> Maven home: E:\Java\apache-maven-3.3.9
> Java version: 1.8.0_101, vendor: Oracle Corporation
> Java home: C:\Program Files\Java\jdk1.8.0_101\jre
> Default locale: en_US, platform encoding: Cp1252
> OS name: "windows 7", version: "6.1", arch: "amd64", family: "dos"
>
> Gary
>
> On Mon, Sep 5, 2016 at 5:32 PM, Ralph Goers <ra...@dslextreme.com>
> wrote:
>
>> And you are building with Java 7?
>>
>> Ralph
>>
>> On Sep 5, 2016, at 2:18 PM, Gary Gregory <ga...@gmail.com> wrote:
>>
>> Locally, I get:
>>
>> Failed tests:
>>   RoutingAppenderWithPurgingTest.routingTest:91 Incorrect number of
>> appenders with IdlePurgePolicy. expected:<3> but was:<1>
>>
>> Gary
>>
>> On Mon, Sep 5, 2016 at 12:54 PM, Ralph Goers <ra...@dslextreme.com>
>> wrote:
>>
>>> For the record, I am voting -1 on this commit.  It breaks the build
>>> because the DisruptorBlockingQueueFactory has a dependency that requires
>>> Java 8. The 2.7 release is blocked until this is corrected.
>>>
>>> Ralph
>>>
>>> > On Sep 4, 2016, at 11:38 AM, mattsicker@apache.org wrote:
>>> >
>>> > Convert BlockingQueueFactory into a plugin element
>>> >
>>> > Related to LOG4J2-1430.
>>> >
>>> >
>>> > Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
>>> > Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit
>>> /65ec9bce
>>> > Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/6
>>> 5ec9bce
>>> > Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/6
>>> 5ec9bce
>>> >
>>> > Branch: refs/heads/master
>>> > Commit: 65ec9bcef74dc30ecab9c2091c6e0638d53490d8
>>> > Parents: 0848d7a
>>> > Author: Matt Sicker <bo...@gmail.com>
>>> > Authored: Fri Jun 17 18:51:08 2016 -0500
>>> > Committer: Matt Sicker <bo...@gmail.com>
>>> > Committed: Fri Jun 17 18:51:08 2016 -0500
>>> >
>>> > ----------------------------------------------------------------------
>>> > .../log4j/core/appender/AsyncAppender.java      | 24 +++++++++---
>>> > .../core/async/ArrayBlockingQueueFactory.java   | 10 +++++
>>> > .../log4j/core/async/BlockingQueueFactory.java  | 13 ++++++-
>>> > .../async/DisruptorBlockingQueueFactory.java    | 11 +++++-
>>> > .../core/async/LinkedTransferQueueFactory.java  | 10 +++++
>>> > .../log4j/core/appender/AsyncAppenderTest.java  | 16 ++++----
>>> > .../BlockingQueueFactory-ArrayBlockingQueue.xml | 40
>>> ++++++++++++++++++++
>>> > ...ckingQueueFactory-DisruptorBlockingQueue.xml | 40
>>> ++++++++++++++++++++
>>> > ...BlockingQueueFactory-LinkedTransferQueue.xml | 40
>>> ++++++++++++++++++++
>>> > 9 files changed, 189 insertions(+), 15 deletions(-)
>>> > ----------------------------------------------------------------------
>>> >
>>> >
>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>> 5ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/co
>>> re/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/app
>>> ender/AsyncAppender.java
>>> > index 3c9c37c..dee5e50 100644
>>> > --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/app
>>> ender/AsyncAppender.java
>>> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/app
>>> ender/AsyncAppender.java
>>> > @@ -26,8 +26,11 @@ 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;
>>> > +import org.apache.logging.log4j.core.async.ArrayBlockingQueueFactory;
>>> > import org.apache.logging.log4j.core.async.AsyncQueueFullPolicy;
>>> > import org.apache.logging.log4j.core.async.AsyncQueueFullPolicyFact
>>> ory;
>>> > +import org.apache.logging.log4j.core.async.BlockingQueueFactory;
>>> > +import org.apache.logging.log4j.core.async.BlockingQueueFactoryUtil;
>>> > import org.apache.logging.log4j.core.async.DiscardingAsyncQueueFull
>>> Policy;
>>> > import org.apache.logging.log4j.core.async.EventRoute;
>>> > import org.apache.logging.log4j.core.config.AppenderControl;
>>> > @@ -42,7 +45,6 @@ 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.validation.cons
>>> traints.Required;
>>> > import org.apache.logging.log4j.core.impl.Log4jLogEvent;
>>> > -import org.apache.logging.log4j.core.async.BlockingQueueFactoryUtil;
>>> > import org.apache.logging.log4j.core.util.Constants;
>>> >
>>> > /**
>>> > @@ -73,8 +75,8 @@ public final class AsyncAppender extends
>>> AbstractAppender {
>>> >
>>> >     private AsyncAppender(final String name, final Filter filter,
>>> final AppenderRef[] appenderRefs,
>>> >                           final String errorRef, final int queueSize,
>>> final boolean blocking,
>>> > -                          final boolean ignoreExceptions,
>>> > -                          final long shutdownTimeout, final
>>> Configuration config, final boolean includeLocation) {
>>> > +                          final boolean ignoreExceptions, final long
>>> shutdownTimeout, final Configuration config,
>>> > +                          final boolean includeLocation, final
>>> BlockingQueueFactory<LogEvent> blockingQueueFactory) {
>>> >         super(name, filter, null, ignoreExceptions);
>>> >         this.queue = BlockingQueueFactoryUtil.<LogE
>>> vent>getBlockingQueueFactory().create(queueSize);
>>> >         this.queueSize = queueSize;
>>> > @@ -217,7 +219,9 @@ public final class AsyncAppender extends
>>> AbstractAppender {
>>> >     }
>>> >
>>> >     /**
>>> > -     * Create an AsyncAppender.
>>> > +     * Create an AsyncAppender. This method is retained for backwards
>>> compatibility. New code should use the
>>> > +     * {@link Builder} instead. This factory will use {@link
>>> ArrayBlockingQueueFactory} by default as was the behavior
>>> > +     * pre-2.7.
>>> >      *
>>> >      * @param appenderRefs     The Appenders to reference.
>>> >      * @param errorRef         An optional Appender to write to if the
>>> queue is full or other errors occur.
>>> > @@ -247,7 +251,7 @@ public final class AsyncAppender extends
>>> AbstractAppender {
>>> >         }
>>> >
>>> >         return new AsyncAppender(name, filter, appenderRefs, errorRef,
>>> size, blocking, ignoreExceptions,
>>> > -            shutdownTimeout, config, includeLocation);
>>> > +            shutdownTimeout, config, includeLocation, new
>>> ArrayBlockingQueueFactory<LogEvent>());
>>> >     }
>>> >
>>> >     @PluginBuilderFactory
>>> > @@ -290,6 +294,9 @@ public final class AsyncAppender extends
>>> AbstractAppender {
>>> >         @PluginBuilderAttribute
>>> >         private boolean ignoreExceptions = true;
>>> >
>>> > +        @PluginElement(BlockingQueueFactory.ELEMENT_TYPE)
>>> > +        private BlockingQueueFactory<LogEvent> blockingQueueFactory =
>>> new ArrayBlockingQueueFactory<>();
>>> > +
>>> >         public Builder setAppenderRefs(AppenderRef[] appenderRefs) {
>>> >             this.appenderRefs = appenderRefs;
>>> >             return this;
>>> > @@ -340,10 +347,15 @@ public final class AsyncAppender extends
>>> AbstractAppender {
>>> >             return this;
>>> >         }
>>> >
>>> > +        public Builder setBlockingQueueFactory(final
>>> BlockingQueueFactory<LogEvent> blockingQueueFactory) {
>>> > +            this.blockingQueueFactory = blockingQueueFactory;
>>> > +            return this;
>>> > +        }
>>> > +
>>> >         @Override
>>> >         public AsyncAppender build() {
>>> >             return new AsyncAppender(name, filter, appenderRefs,
>>> errorRef, bufferSize, blocking, ignoreExceptions,
>>> > -                shutdownTimeout, configuration, includeLocation);
>>> > +                shutdownTimeout, configuration, includeLocation,
>>> blockingQueueFactory);
>>> >         }
>>> >     }
>>> >
>>> >
>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>> 5ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/co
>>> re/async/ArrayBlockingQueueFactory.java
>>> > ----------------------------------------------------------------------
>>> > diff --git a/log4j-core/src/main/java/org
>>> /apache/logging/log4j/core/async/ArrayBlockingQueueFactory.java
>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>> nc/ArrayBlockingQueueFactory.java
>>> > index e9c99b8..dcad78a 100644
>>> > --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>> nc/ArrayBlockingQueueFactory.java
>>> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>> nc/ArrayBlockingQueueFactory.java
>>> > @@ -3,14 +3,24 @@ package org.apache.logging.log4j.core.async;
>>> > import java.util.concurrent.ArrayBlockingQueue;
>>> > import java.util.concurrent.BlockingQueue;
>>> >
>>> > +import org.apache.logging.log4j.core.config.Node;
>>> > +import org.apache.logging.log4j.core.config.plugins.Plugin;
>>> > +import org.apache.logging.log4j.core.config.plugins.PluginFactory;
>>> > +
>>> > /**
>>> >  * Factory for creating instances of {@link ArrayBlockingQueue}.
>>> >  *
>>> >  * @since 2.7
>>> >  */
>>> > +@Plugin(name = "ArrayBlockingQueue", category = Node.CATEGORY,
>>> elementType = BlockingQueueFactory.ELEMENT_TYPE)
>>> > public class ArrayBlockingQueueFactory<E> implements
>>> BlockingQueueFactory<E> {
>>> >     @Override
>>> >     public BlockingQueue<E> create(int capacity) {
>>> >         return new ArrayBlockingQueue<>(capacity);
>>> >     }
>>> > +
>>> > +    @PluginFactory
>>> > +    public static <E> ArrayBlockingQueueFactory<E> createFactory() {
>>> > +        return new ArrayBlockingQueueFactory<>();
>>> > +    }
>>> > }
>>> >
>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>> 5ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/co
>>> re/async/BlockingQueueFactory.java
>>> > ----------------------------------------------------------------------
>>> > diff --git a/log4j-core/src/main/java/org
>>> /apache/logging/log4j/core/async/BlockingQueueFactory.java
>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>> nc/BlockingQueueFactory.java
>>> > index ccd1625..5763d1e 100644
>>> > --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>> nc/BlockingQueueFactory.java
>>> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>> nc/BlockingQueueFactory.java
>>> > @@ -9,7 +9,18 @@ import java.util.concurrent.BlockingQueue;
>>> >  */
>>> > public interface BlockingQueueFactory<E> {
>>> >
>>> > -    String PROPERTY = "log4j.BlockingQueueFactory";
>>> > +    /**
>>> > +     * The {@link org.apache.logging.log4j.core.
>>> config.plugins.Plugin#elementType() element type} to use for plugins
>>> > +     * implementing this interface.
>>> > +     */
>>> > +    String ELEMENT_TYPE = "BlockingQueueFactory";
>>> >
>>> > +    /**
>>> > +     * Creates a new BlockingQueue with the specified maximum
>>> capacity. Note that not all implementations of
>>> > +     * BlockingQueue support a bounded capacity in which case the
>>> value is ignored.
>>> > +     *
>>> > +     * @param capacity maximum size of the queue if supported
>>> > +     * @return a new BlockingQueue
>>> > +     */
>>> >     BlockingQueue<E> create(int capacity);
>>> > }
>>> >
>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>> 5ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/co
>>> re/async/DisruptorBlockingQueueFactory.java
>>> > ----------------------------------------------------------------------
>>> > diff --git a/log4j-core/src/main/java/org
>>> /apache/logging/log4j/core/async/DisruptorBlockingQueueFactory.java
>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>> nc/DisruptorBlockingQueueFactory.java
>>> > index 8fb3707..add375d 100644
>>> > --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>> nc/DisruptorBlockingQueueFactory.java
>>> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>> nc/DisruptorBlockingQueueFactory.java
>>> > @@ -3,15 +3,24 @@ package org.apache.logging.log4j.core.async;
>>> > import java.util.concurrent.BlockingQueue;
>>> >
>>> > import com.conversantmedia.util.concurrent.DisruptorBlockingQueue;
>>> > +import org.apache.logging.log4j.core.config.Node;
>>> > +import org.apache.logging.log4j.core.config.plugins.Plugin;
>>> > +import org.apache.logging.log4j.core.config.plugins.PluginFactory;
>>> >
>>> > /**
>>> >  * Factory for creating instances of {@link DisruptorBlockingQueue}.
>>> >  *
>>> >  * @since 2.7
>>> >  */
>>> > +@Plugin(name = "DisruptorBlockingQueue", category = Node.CATEGORY,
>>> elementType = BlockingQueueFactory.ELEMENT_TYPE)
>>> > public class DisruptorBlockingQueueFactory<E> implements
>>> BlockingQueueFactory<E> {
>>> >     @Override
>>> >     public BlockingQueue<E> create(int capacity) {
>>> > -        return new DisruptorBlockingQueue<E>(capacity);
>>> > +        return new DisruptorBlockingQueue<>(capacity);
>>> > +    }
>>> > +
>>> > +    @PluginFactory
>>> > +    public static <E> DisruptorBlockingQueueFactory<E>
>>> createFactory() {
>>> > +        return new DisruptorBlockingQueueFactory<>();
>>> >     }
>>> > }
>>> >
>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>> 5ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/co
>>> re/async/LinkedTransferQueueFactory.java
>>> > ----------------------------------------------------------------------
>>> > diff --git a/log4j-core/src/main/java/org
>>> /apache/logging/log4j/core/async/LinkedTransferQueueFactory.java
>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>> nc/LinkedTransferQueueFactory.java
>>> > index 862fab3..6ab24e7 100644
>>> > --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>> nc/LinkedTransferQueueFactory.java
>>> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>>> nc/LinkedTransferQueueFactory.java
>>> > @@ -20,14 +20,24 @@ package org.apache.logging.log4j.core.async;
>>> > import java.util.concurrent.BlockingQueue;
>>> > import java.util.concurrent.LinkedTransferQueue;
>>> >
>>> > +import org.apache.logging.log4j.core.config.Node;
>>> > +import org.apache.logging.log4j.core.config.plugins.Plugin;
>>> > +import org.apache.logging.log4j.core.config.plugins.PluginFactory;
>>> > +
>>> > /**
>>> >  * Factory for creating instances of {@link LinkedTransferQueue}.
>>> >  *
>>> >  * @since 2.7
>>> >  */
>>> > +@Plugin(name = "LinkedTransferQueue", category = Node.CATEGORY,
>>> elementType = BlockingQueueFactory.ELEMENT_TYPE)
>>> > public class LinkedTransferQueueFactory<E> implements
>>> BlockingQueueFactory<E> {
>>> >     @Override
>>> >     public BlockingQueue<E> create(int capacity) {
>>> >         return new LinkedTransferQueue<>();
>>> >     }
>>> > +
>>> > +    @PluginFactory
>>> > +    public static <E> LinkedTransferQueueFactory<E> createFactory() {
>>> > +        return new LinkedTransferQueueFactory<>();
>>> > +    }
>>> > }
>>> >
>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>> 5ec9bce/log4j-core/src/test/java/org/apache/logging/log4j/co
>>> re/appender/AsyncAppenderTest.java
>>> > ----------------------------------------------------------------------
>>> > diff --git a/log4j-core/src/test/java/org
>>> /apache/logging/log4j/core/appender/AsyncAppenderTest.java
>>> b/log4j-core/src/test/java/org/apache/logging/log4j/core/app
>>> ender/AsyncAppenderTest.java
>>> > index 3066f38..076fdd0 100644
>>> > --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/app
>>> ender/AsyncAppenderTest.java
>>> > +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/app
>>> ender/AsyncAppenderTest.java
>>> > @@ -41,19 +41,21 @@ import static org.junit.Assert.*;
>>> >  */
>>> > @RunWith(Parameterized.class)
>>> > public class AsyncAppenderTest {
>>> > -    private static final String CONFIG = "log4j-asynch.xml";
>>> >
>>> >     @Parameterized.Parameters
>>> >     public static Object[] data() {
>>> > -        return new Class<?>[]{
>>> > -            ArrayBlockingQueueFactory.class,
>>> > -            DisruptorBlockingQueueFactory.class,
>>> > -            LinkedTransferQueueFactory.class
>>> > +        return new String[]{
>>> > +            // default async config uses array blocking queue
>>> > +            "log4j-asynch.xml",
>>> > +            // override default blocking queue implementations
>>> > +            "BlockingQueueFactory-ArrayBlockingQueue.xml",
>>> > +            "BlockingQueueFactory-DisruptorBlockingQueue.xml",
>>> > +            "BlockingQueueFactory-LinkedTransferQueue.xml"
>>> >         };
>>> >     }
>>> >
>>> > -    public AsyncAppenderTest(final Class<? extends
>>> BlockingQueueFactory> factory) {
>>> > -        context = new LoggerContextRule(CONFIG).with
>>> SystemProperty(BlockingQueueFactory.PROPERTY, factory.getName());
>>> > +    public AsyncAppenderTest(final String configFileName) {
>>> > +        context = new LoggerContextRule(configFileName);
>>> >     }
>>> >
>>> >     @Rule
>>> >
>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>> 5ec9bce/log4j-core/src/test/resources/BlockingQueueFactory-A
>>> rrayBlockingQueue.xml
>>> > ----------------------------------------------------------------------
>>> > diff --git a/log4j-core/src/test/resource
>>> s/BlockingQueueFactory-ArrayBlockingQueue.xml
>>> b/log4j-core/src/test/resources/BlockingQueueFactory-ArrayBl
>>> ockingQueue.xml
>>> > new file mode 100644
>>> > index 0000000..e8bbfa6
>>> > --- /dev/null
>>> > +++ b/log4j-core/src/test/resources/BlockingQueueFactory-ArrayBl
>>> ockingQueue.xml
>>> > @@ -0,0 +1,40 @@
>>> > +<?xml version="1.0" encoding="UTF-8"?>
>>> > +<!--
>>> > + Licensed to the Apache Software Foundation (ASF) under one or more
>>> > + contributor license agreements.  See the NOTICE file distributed with
>>> > + this work for additional information regarding copyright ownership.
>>> > + The ASF licenses this file to You under the Apache License, Version
>>> 2.0
>>> > + (the "License"); you may not use this file except in compliance with
>>> > + the License.  You may obtain a copy of the License at
>>> > +
>>> > +      http://www.apache.org/licenses/LICENSE-2.0
>>> > +
>>> > + Unless required by applicable law or agreed to in writing, software
>>> > + distributed under the License is distributed on an "AS IS" BASIS,
>>> > + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>>> implied.
>>> > + See the License for the specific language governing permissions and
>>> > + limitations under the License.
>>> > +
>>> > +-->
>>> > +<Configuration status="OFF" name="ArrayBlockingQueueFactory">
>>> > +
>>> > +  <Appenders>
>>> > +    <Console name="STDOUT">
>>> > +      <PatternLayout pattern="%m%n"/>
>>> > +    </Console>
>>> > +    <List name="List">
>>> > +      <PatternLayout pattern="%C %M %m"/>
>>> > +    </List>
>>> > +    <Async name="Async" includeLocation="true" error-ref="STDOUT">
>>> > +      <AppenderRef ref="List"/>
>>> > +      <ArrayBlockingQueue/>
>>> > +    </Async>
>>> > +  </Appenders>
>>> > +
>>> > +  <Loggers>
>>> > +    <Root level="debug">
>>> > +      <AppenderRef ref="Async"/>
>>> > +    </Root>
>>> > +  </Loggers>
>>> > +
>>> > +</Configuration>
>>> > \ No newline at end of file
>>> >
>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>> 5ec9bce/log4j-core/src/test/resources/BlockingQueueFactory-D
>>> isruptorBlockingQueue.xml
>>> > ----------------------------------------------------------------------
>>> > diff --git a/log4j-core/src/test/resource
>>> s/BlockingQueueFactory-DisruptorBlockingQueue.xml
>>> b/log4j-core/src/test/resources/BlockingQueueFactory-Disrupt
>>> orBlockingQueue.xml
>>> > new file mode 100644
>>> > index 0000000..268cca7
>>> > --- /dev/null
>>> > +++ b/log4j-core/src/test/resources/BlockingQueueFactory-Disrupt
>>> orBlockingQueue.xml
>>> > @@ -0,0 +1,40 @@
>>> > +<?xml version="1.0" encoding="UTF-8"?>
>>> > +<!--
>>> > + Licensed to the Apache Software Foundation (ASF) under one or more
>>> > + contributor license agreements.  See the NOTICE file distributed with
>>> > + this work for additional information regarding copyright ownership.
>>> > + The ASF licenses this file to You under the Apache License, Version
>>> 2.0
>>> > + (the "License"); you may not use this file except in compliance with
>>> > + the License.  You may obtain a copy of the License at
>>> > +
>>> > +      http://www.apache.org/licenses/LICENSE-2.0
>>> > +
>>> > + Unless required by applicable law or agreed to in writing, software
>>> > + distributed under the License is distributed on an "AS IS" BASIS,
>>> > + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>>> implied.
>>> > + See the License for the specific language governing permissions and
>>> > + limitations under the License.
>>> > +
>>> > +-->
>>> > +<Configuration status="OFF" name="DisruptorBlockingQueueFactory">
>>> > +
>>> > +  <Appenders>
>>> > +    <Console name="STDOUT">
>>> > +      <PatternLayout pattern="%m%n"/>
>>> > +    </Console>
>>> > +    <List name="List">
>>> > +      <PatternLayout pattern="%C %M %m"/>
>>> > +    </List>
>>> > +    <Async name="Async" includeLocation="true" error-ref="STDOUT">
>>> > +      <AppenderRef ref="List"/>
>>> > +      <DisruptorBlockingQueue/>
>>> > +    </Async>
>>> > +  </Appenders>
>>> > +
>>> > +  <Loggers>
>>> > +    <Root level="debug">
>>> > +      <AppenderRef ref="Async"/>
>>> > +    </Root>
>>> > +  </Loggers>
>>> > +
>>> > +</Configuration>
>>> > \ No newline at end of file
>>> >
>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>>> 5ec9bce/log4j-core/src/test/resources/BlockingQueueFactory-L
>>> inkedTransferQueue.xml
>>> > ----------------------------------------------------------------------
>>> > diff --git a/log4j-core/src/test/resource
>>> s/BlockingQueueFactory-LinkedTransferQueue.xml
>>> b/log4j-core/src/test/resources/BlockingQueueFactory-LinkedT
>>> ransferQueue.xml
>>> > new file mode 100644
>>> > index 0000000..13063d3
>>> > --- /dev/null
>>> > +++ b/log4j-core/src/test/resources/BlockingQueueFactory-LinkedT
>>> ransferQueue.xml
>>> > @@ -0,0 +1,40 @@
>>> > +<?xml version="1.0" encoding="UTF-8"?>
>>> > +<!--
>>> > + Licensed to the Apache Software Foundation (ASF) under one or more
>>> > + contributor license agreements.  See the NOTICE file distributed with
>>> > + this work for additional information regarding copyright ownership.
>>> > + The ASF licenses this file to You under the Apache License, Version
>>> 2.0
>>> > + (the "License"); you may not use this file except in compliance with
>>> > + the License.  You may obtain a copy of the License at
>>> > +
>>> > +      http://www.apache.org/licenses/LICENSE-2.0
>>> > +
>>> > + Unless required by applicable law or agreed to in writing, software
>>> > + distributed under the License is distributed on an "AS IS" BASIS,
>>> > + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>>> implied.
>>> > + See the License for the specific language governing permissions and
>>> > + limitations under the License.
>>> > +
>>> > +-->
>>> > +<Configuration status="OFF" name="LinkedTransferQueueFactory">
>>> > +
>>> > +  <Appenders>
>>> > +    <Console name="STDOUT">
>>> > +      <PatternLayout pattern="%m%n"/>
>>> > +    </Console>
>>> > +    <List name="List">
>>> > +      <PatternLayout pattern="%C %M %m"/>
>>> > +    </List>
>>> > +    <Async name="Async" includeLocation="true" error-ref="STDOUT">
>>> > +      <AppenderRef ref="List"/>
>>> > +      <LinkedTransferQueue/>
>>> > +    </Async>
>>> > +  </Appenders>
>>> > +
>>> > +  <Loggers>
>>> > +    <Root level="debug">
>>> > +      <AppenderRef ref="Async"/>
>>> > +    </Root>
>>> > +  </Loggers>
>>> > +
>>> > +</Configuration>
>>> > \ No newline at end of file
>>> >
>>> >
>>>
>>>
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: log4j-dev-unsubscribe@logging.apache.org
>>> For additional commands, e-mail: log4j-dev-help@logging.apache.org
>>>
>>>
>>
>>
>> --
>> 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
>>
>>
>>
>
>
> --
> 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
>
>
>


-- 
Matt Sicker <bo...@gmail.com>

Re: [13/36] logging-log4j2 git commit: Convert BlockingQueueFactory into a plugin element

Posted by Ralph Goers <ra...@dslextreme.com>.
Jenkins and the release builds use Java 7, so you should certainly use Java 7 from time to time.

Ralph

> On Sep 5, 2016, at 2:33 PM, Gary Gregory <ga...@gmail.com> wrote:
> 
> Ah, no, Java 8:
> 
> Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-10T08:41:47-08:00)
> Maven home: E:\Java\apache-maven-3.3.9
> Java version: 1.8.0_101, vendor: Oracle Corporation
> Java home: C:\Program Files\Java\jdk1.8.0_101\jre
> Default locale: en_US, platform encoding: Cp1252
> OS name: "windows 7", version: "6.1", arch: "amd64", family: "dos"
> 
> Gary
> 
> On Mon, Sep 5, 2016 at 5:32 PM, Ralph Goers <ralph.goers@dslextreme.com <ma...@dslextreme.com>> wrote:
> And you are building with Java 7?
> 
> Ralph
> 
>> On Sep 5, 2016, at 2:18 PM, Gary Gregory <garydgregory@gmail.com <ma...@gmail.com>> wrote:
>> 
>> Locally, I get:
>> 
>> Failed tests:
>>   RoutingAppenderWithPurgingTest.routingTest:91 Incorrect number of appenders with IdlePurgePolicy. expected:<3> but was:<1>
>> 
>> Gary
>> 
>> On Mon, Sep 5, 2016 at 12:54 PM, Ralph Goers <ralph.goers@dslextreme.com <ma...@dslextreme.com>> wrote:
>> For the record, I am voting -1 on this commit.  It breaks the build because the DisruptorBlockingQueueFactory has a dependency that requires Java 8. The 2.7 release is blocked until this is corrected.
>> 
>> Ralph
>> 
>> > On Sep 4, 2016, at 11:38 AM, mattsicker@apache.org <ma...@apache.org> wrote:
>> >
>> > Convert BlockingQueueFactory into a plugin element
>> >
>> > Related to LOG4J2-1430.
>> >
>> >
>> > Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo <http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo>
>> > Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/65ec9bce <http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/65ec9bce>
>> > Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/65ec9bce <http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/65ec9bce>
>> > Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/65ec9bce <http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/65ec9bce>
>> >
>> > Branch: refs/heads/master
>> > Commit: 65ec9bcef74dc30ecab9c2091c6e0638d53490d8
>> > Parents: 0848d7a
>> > Author: Matt Sicker <boards@gmail.com <ma...@gmail.com>>
>> > Authored: Fri Jun 17 18:51:08 2016 -0500
>> > Committer: Matt Sicker <boards@gmail.com <ma...@gmail.com>>
>> > Committed: Fri Jun 17 18:51:08 2016 -0500
>> >
>> > ----------------------------------------------------------------------
>> > .../log4j/core/appender/AsyncAppender.java      | 24 +++++++++---
>> > .../core/async/ArrayBlockingQueueFactory.java   | 10 +++++
>> > .../log4j/core/async/BlockingQueueFactory.java  | 13 ++++++-
>> > .../async/DisruptorBlockingQueueFactory.java    | 11 +++++-
>> > .../core/async/LinkedTransferQueueFactory.java  | 10 +++++
>> > .../log4j/core/appender/AsyncAppenderTest.java  | 16 ++++----
>> > .../BlockingQueueFactory-ArrayBlockingQueue.xml | 40 ++++++++++++++++++++
>> > ...ckingQueueFactory-DisruptorBlockingQueue.xml | 40 ++++++++++++++++++++
>> > ...BlockingQueueFactory-LinkedTransferQueue.xml | 40 ++++++++++++++++++++
>> > 9 files changed, 189 insertions(+), 15 deletions(-)
>> > ----------------------------------------------------------------------
>> >
>> >
>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/65ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AsyncAppender.java <http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/65ec9bce/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 3c9c37c..dee5e50 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
>> > @@ -26,8 +26,11 @@ 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;
>> > +import org.apache.logging.log4j.core.async.ArrayBlockingQueueFactory;
>> > import org.apache.logging.log4j.core.async.AsyncQueueFullPolicy;
>> > import org.apache.logging.log4j.core.async.AsyncQueueFullPolicyFactory;
>> > +import org.apache.logging.log4j.core.async.BlockingQueueFactory;
>> > +import org.apache.logging.log4j.core.async.BlockingQueueFactoryUtil;
>> > import org.apache.logging.log4j.core.async.DiscardingAsyncQueueFullPolicy;
>> > import org.apache.logging.log4j.core.async.EventRoute;
>> > import org.apache.logging.log4j.core.config.AppenderControl;
>> > @@ -42,7 +45,6 @@ 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.validation.constraints.Required;
>> > import org.apache.logging.log4j.core.impl.Log4jLogEvent;
>> > -import org.apache.logging.log4j.core.async.BlockingQueueFactoryUtil;
>> > import org.apache.logging.log4j.core.util.Constants;
>> >
>> > /**
>> > @@ -73,8 +75,8 @@ public final class AsyncAppender extends AbstractAppender {
>> >
>> >     private AsyncAppender(final String name, final Filter filter, final AppenderRef[] appenderRefs,
>> >                           final String errorRef, final int queueSize, final boolean blocking,
>> > -                          final boolean ignoreExceptions,
>> > -                          final long shutdownTimeout, final Configuration config, final boolean includeLocation) {
>> > +                          final boolean ignoreExceptions, final long shutdownTimeout, final Configuration config,
>> > +                          final boolean includeLocation, final BlockingQueueFactory<LogEvent> blockingQueueFactory) {
>> >         super(name, filter, null, ignoreExceptions);
>> >         this.queue = BlockingQueueFactoryUtil.<LogEvent>getBlockingQueueFactory().create(queueSize);
>> >         this.queueSize = queueSize;
>> > @@ -217,7 +219,9 @@ public final class AsyncAppender extends AbstractAppender {
>> >     }
>> >
>> >     /**
>> > -     * Create an AsyncAppender.
>> > +     * Create an AsyncAppender. This method is retained for backwards compatibility. New code should use the
>> > +     * {@link Builder} instead. This factory will use {@link ArrayBlockingQueueFactory} by default as was the behavior
>> > +     * pre-2.7.
>> >      *
>> >      * @param appenderRefs     The Appenders to reference.
>> >      * @param errorRef         An optional Appender to write to if the queue is full or other errors occur.
>> > @@ -247,7 +251,7 @@ public final class AsyncAppender extends AbstractAppender {
>> >         }
>> >
>> >         return new AsyncAppender(name, filter, appenderRefs, errorRef, size, blocking, ignoreExceptions,
>> > -            shutdownTimeout, config, includeLocation);
>> > +            shutdownTimeout, config, includeLocation, new ArrayBlockingQueueFactory<LogEvent>());
>> >     }
>> >
>> >     @PluginBuilderFactory
>> > @@ -290,6 +294,9 @@ public final class AsyncAppender extends AbstractAppender {
>> >         @PluginBuilderAttribute
>> >         private boolean ignoreExceptions = true;
>> >
>> > +        @PluginElement(BlockingQueueFactory.ELEMENT_TYPE)
>> > +        private BlockingQueueFactory<LogEvent> blockingQueueFactory = new ArrayBlockingQueueFactory<>();
>> > +
>> >         public Builder setAppenderRefs(AppenderRef[] appenderRefs) {
>> >             this.appenderRefs = appenderRefs;
>> >             return this;
>> > @@ -340,10 +347,15 @@ public final class AsyncAppender extends AbstractAppender {
>> >             return this;
>> >         }
>> >
>> > +        public Builder setBlockingQueueFactory(final BlockingQueueFactory<LogEvent> blockingQueueFactory) {
>> > +            this.blockingQueueFactory = blockingQueueFactory;
>> > +            return this;
>> > +        }
>> > +
>> >         @Override
>> >         public AsyncAppender build() {
>> >             return new AsyncAppender(name, filter, appenderRefs, errorRef, bufferSize, blocking, ignoreExceptions,
>> > -                shutdownTimeout, configuration, includeLocation);
>> > +                shutdownTimeout, configuration, includeLocation, blockingQueueFactory);
>> >         }
>> >     }
>> >
>> >
>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/65ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/core/async/ArrayBlockingQueueFactory.java <http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/65ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/core/async/ArrayBlockingQueueFactory.java>
>> > ----------------------------------------------------------------------
>> > diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/ArrayBlockingQueueFactory.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/ArrayBlockingQueueFactory.java
>> > index e9c99b8..dcad78a 100644
>> > --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/ArrayBlockingQueueFactory.java
>> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/ArrayBlockingQueueFactory.java
>> > @@ -3,14 +3,24 @@ package org.apache.logging.log4j.core.async;
>> > import java.util.concurrent.ArrayBlockingQueue;
>> > import java.util.concurrent.BlockingQueue;
>> >
>> > +import org.apache.logging.log4j.core.config.Node;
>> > +import org.apache.logging.log4j.core.config.plugins.Plugin;
>> > +import org.apache.logging.log4j.core.config.plugins.PluginFactory;
>> > +
>> > /**
>> >  * Factory for creating instances of {@link ArrayBlockingQueue}.
>> >  *
>> >  * @since 2.7
>> >  */
>> > +@Plugin(name = "ArrayBlockingQueue", category = Node.CATEGORY, elementType = BlockingQueueFactory.ELEMENT_TYPE)
>> > public class ArrayBlockingQueueFactory<E> implements BlockingQueueFactory<E> {
>> >     @Override
>> >     public BlockingQueue<E> create(int capacity) {
>> >         return new ArrayBlockingQueue<>(capacity);
>> >     }
>> > +
>> > +    @PluginFactory
>> > +    public static <E> ArrayBlockingQueueFactory<E> createFactory() {
>> > +        return new ArrayBlockingQueueFactory<>();
>> > +    }
>> > }
>> >
>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/65ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/core/async/BlockingQueueFactory.java <http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/65ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/core/async/BlockingQueueFactory.java>
>> > ----------------------------------------------------------------------
>> > diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/BlockingQueueFactory.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/BlockingQueueFactory.java
>> > index ccd1625..5763d1e 100644
>> > --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/BlockingQueueFactory.java
>> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/BlockingQueueFactory.java
>> > @@ -9,7 +9,18 @@ import java.util.concurrent.BlockingQueue;
>> >  */
>> > public interface BlockingQueueFactory<E> {
>> >
>> > -    String PROPERTY = "log4j.BlockingQueueFactory";
>> > +    /**
>> > +     * The {@link org.apache.logging.log4j.core.config.plugins.Plugin#elementType() element type} to use for plugins
>> > +     * implementing this interface.
>> > +     */
>> > +    String ELEMENT_TYPE = "BlockingQueueFactory";
>> >
>> > +    /**
>> > +     * Creates a new BlockingQueue with the specified maximum capacity. Note that not all implementations of
>> > +     * BlockingQueue support a bounded capacity in which case the value is ignored.
>> > +     *
>> > +     * @param capacity maximum size of the queue if supported
>> > +     * @return a new BlockingQueue
>> > +     */
>> >     BlockingQueue<E> create(int capacity);
>> > }
>> >
>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/65ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/core/async/DisruptorBlockingQueueFactory.java <http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/65ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/core/async/DisruptorBlockingQueueFactory.java>
>> > ----------------------------------------------------------------------
>> > diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/DisruptorBlockingQueueFactory.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/DisruptorBlockingQueueFactory.java
>> > index 8fb3707..add375d 100644
>> > --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/DisruptorBlockingQueueFactory.java
>> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/DisruptorBlockingQueueFactory.java
>> > @@ -3,15 +3,24 @@ package org.apache.logging.log4j.core.async;
>> > import java.util.concurrent.BlockingQueue;
>> >
>> > import com.conversantmedia.util.concurrent.DisruptorBlockingQueue;
>> > +import org.apache.logging.log4j.core.config.Node;
>> > +import org.apache.logging.log4j.core.config.plugins.Plugin;
>> > +import org.apache.logging.log4j.core.config.plugins.PluginFactory;
>> >
>> > /**
>> >  * Factory for creating instances of {@link DisruptorBlockingQueue}.
>> >  *
>> >  * @since 2.7
>> >  */
>> > +@Plugin(name = "DisruptorBlockingQueue", category = Node.CATEGORY, elementType = BlockingQueueFactory.ELEMENT_TYPE)
>> > public class DisruptorBlockingQueueFactory<E> implements BlockingQueueFactory<E> {
>> >     @Override
>> >     public BlockingQueue<E> create(int capacity) {
>> > -        return new DisruptorBlockingQueue<E>(capacity);
>> > +        return new DisruptorBlockingQueue<>(capacity);
>> > +    }
>> > +
>> > +    @PluginFactory
>> > +    public static <E> DisruptorBlockingQueueFactory<E> createFactory() {
>> > +        return new DisruptorBlockingQueueFactory<>();
>> >     }
>> > }
>> >
>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/65ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/core/async/LinkedTransferQueueFactory.java <http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/65ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/core/async/LinkedTransferQueueFactory.java>
>> > ----------------------------------------------------------------------
>> > diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/LinkedTransferQueueFactory.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/LinkedTransferQueueFactory.java
>> > index 862fab3..6ab24e7 100644
>> > --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/LinkedTransferQueueFactory.java
>> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/LinkedTransferQueueFactory.java
>> > @@ -20,14 +20,24 @@ package org.apache.logging.log4j.core.async;
>> > import java.util.concurrent.BlockingQueue;
>> > import java.util.concurrent.LinkedTransferQueue;
>> >
>> > +import org.apache.logging.log4j.core.config.Node;
>> > +import org.apache.logging.log4j.core.config.plugins.Plugin;
>> > +import org.apache.logging.log4j.core.config.plugins.PluginFactory;
>> > +
>> > /**
>> >  * Factory for creating instances of {@link LinkedTransferQueue}.
>> >  *
>> >  * @since 2.7
>> >  */
>> > +@Plugin(name = "LinkedTransferQueue", category = Node.CATEGORY, elementType = BlockingQueueFactory.ELEMENT_TYPE)
>> > public class LinkedTransferQueueFactory<E> implements BlockingQueueFactory<E> {
>> >     @Override
>> >     public BlockingQueue<E> create(int capacity) {
>> >         return new LinkedTransferQueue<>();
>> >     }
>> > +
>> > +    @PluginFactory
>> > +    public static <E> LinkedTransferQueueFactory<E> createFactory() {
>> > +        return new LinkedTransferQueueFactory<>();
>> > +    }
>> > }
>> >
>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/65ec9bce/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/AsyncAppenderTest.java <http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/65ec9bce/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/AsyncAppenderTest.java>
>> > ----------------------------------------------------------------------
>> > diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/AsyncAppenderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/AsyncAppenderTest.java
>> > index 3066f38..076fdd0 100644
>> > --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/AsyncAppenderTest.java
>> > +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/AsyncAppenderTest.java
>> > @@ -41,19 +41,21 @@ import static org.junit.Assert.*;
>> >  */
>> > @RunWith(Parameterized.class)
>> > public class AsyncAppenderTest {
>> > -    private static final String CONFIG = "log4j-asynch.xml";
>> >
>> >     @Parameterized.Parameters
>> >     public static Object[] data() {
>> > -        return new Class<?>[]{
>> > -            ArrayBlockingQueueFactory.class,
>> > -            DisruptorBlockingQueueFactory.class,
>> > -            LinkedTransferQueueFactory.class
>> > +        return new String[]{
>> > +            // default async config uses array blocking queue
>> > +            "log4j-asynch.xml",
>> > +            // override default blocking queue implementations
>> > +            "BlockingQueueFactory-ArrayBlockingQueue.xml",
>> > +            "BlockingQueueFactory-DisruptorBlockingQueue.xml",
>> > +            "BlockingQueueFactory-LinkedTransferQueue.xml"
>> >         };
>> >     }
>> >
>> > -    public AsyncAppenderTest(final Class<? extends BlockingQueueFactory> factory) {
>> > -        context = new LoggerContextRule(CONFIG).withSystemProperty(BlockingQueueFactory.PROPERTY, factory.getName());
>> > +    public AsyncAppenderTest(final String configFileName) {
>> > +        context = new LoggerContextRule(configFileName);
>> >     }
>> >
>> >     @Rule
>> >
>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/65ec9bce/log4j-core/src/test/resources/BlockingQueueFactory-ArrayBlockingQueue.xml <http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/65ec9bce/log4j-core/src/test/resources/BlockingQueueFactory-ArrayBlockingQueue.xml>
>> > ----------------------------------------------------------------------
>> > diff --git a/log4j-core/src/test/resources/BlockingQueueFactory-ArrayBlockingQueue.xml b/log4j-core/src/test/resources/BlockingQueueFactory-ArrayBlockingQueue.xml
>> > new file mode 100644
>> > index 0000000..e8bbfa6
>> > --- /dev/null
>> > +++ b/log4j-core/src/test/resources/BlockingQueueFactory-ArrayBlockingQueue.xml
>> > @@ -0,0 +1,40 @@
>> > +<?xml version="1.0" encoding="UTF-8"?>
>> > +<!--
>> > + Licensed to the Apache Software Foundation (ASF) under one or more
>> > + contributor license agreements.  See the NOTICE file distributed with
>> > + this work for additional information regarding copyright ownership.
>> > + The ASF licenses this file to You under the Apache License, Version 2.0
>> > + (the "License"); you may not use this file except in compliance with
>> > + the License.  You may obtain a copy of the License at
>> > +
>> > +      http://www.apache.org/licenses/LICENSE-2.0 <http://www.apache.org/licenses/LICENSE-2.0>
>> > +
>> > + Unless required by applicable law or agreed to in writing, software
>> > + distributed under the License is distributed on an "AS IS" BASIS,
>> > + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
>> > + See the License for the specific language governing permissions and
>> > + limitations under the License.
>> > +
>> > +-->
>> > +<Configuration status="OFF" name="ArrayBlockingQueueFactory">
>> > +
>> > +  <Appenders>
>> > +    <Console name="STDOUT">
>> > +      <PatternLayout pattern="%m%n"/>
>> > +    </Console>
>> > +    <List name="List">
>> > +      <PatternLayout pattern="%C %M %m"/>
>> > +    </List>
>> > +    <Async name="Async" includeLocation="true" error-ref="STDOUT">
>> > +      <AppenderRef ref="List"/>
>> > +      <ArrayBlockingQueue/>
>> > +    </Async>
>> > +  </Appenders>
>> > +
>> > +  <Loggers>
>> > +    <Root level="debug">
>> > +      <AppenderRef ref="Async"/>
>> > +    </Root>
>> > +  </Loggers>
>> > +
>> > +</Configuration>
>> > \ No newline at end of file
>> >
>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/65ec9bce/log4j-core/src/test/resources/BlockingQueueFactory-DisruptorBlockingQueue.xml <http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/65ec9bce/log4j-core/src/test/resources/BlockingQueueFactory-DisruptorBlockingQueue.xml>
>> > ----------------------------------------------------------------------
>> > diff --git a/log4j-core/src/test/resources/BlockingQueueFactory-DisruptorBlockingQueue.xml b/log4j-core/src/test/resources/BlockingQueueFactory-DisruptorBlockingQueue.xml
>> > new file mode 100644
>> > index 0000000..268cca7
>> > --- /dev/null
>> > +++ b/log4j-core/src/test/resources/BlockingQueueFactory-DisruptorBlockingQueue.xml
>> > @@ -0,0 +1,40 @@
>> > +<?xml version="1.0" encoding="UTF-8"?>
>> > +<!--
>> > + Licensed to the Apache Software Foundation (ASF) under one or more
>> > + contributor license agreements.  See the NOTICE file distributed with
>> > + this work for additional information regarding copyright ownership.
>> > + The ASF licenses this file to You under the Apache License, Version 2.0
>> > + (the "License"); you may not use this file except in compliance with
>> > + the License.  You may obtain a copy of the License at
>> > +
>> > +      http://www.apache.org/licenses/LICENSE-2.0 <http://www.apache.org/licenses/LICENSE-2.0>
>> > +
>> > + Unless required by applicable law or agreed to in writing, software
>> > + distributed under the License is distributed on an "AS IS" BASIS,
>> > + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
>> > + See the License for the specific language governing permissions and
>> > + limitations under the License.
>> > +
>> > +-->
>> > +<Configuration status="OFF" name="DisruptorBlockingQueueFactory">
>> > +
>> > +  <Appenders>
>> > +    <Console name="STDOUT">
>> > +      <PatternLayout pattern="%m%n"/>
>> > +    </Console>
>> > +    <List name="List">
>> > +      <PatternLayout pattern="%C %M %m"/>
>> > +    </List>
>> > +    <Async name="Async" includeLocation="true" error-ref="STDOUT">
>> > +      <AppenderRef ref="List"/>
>> > +      <DisruptorBlockingQueue/>
>> > +    </Async>
>> > +  </Appenders>
>> > +
>> > +  <Loggers>
>> > +    <Root level="debug">
>> > +      <AppenderRef ref="Async"/>
>> > +    </Root>
>> > +  </Loggers>
>> > +
>> > +</Configuration>
>> > \ No newline at end of file
>> >
>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/65ec9bce/log4j-core/src/test/resources/BlockingQueueFactory-LinkedTransferQueue.xml <http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/65ec9bce/log4j-core/src/test/resources/BlockingQueueFactory-LinkedTransferQueue.xml>
>> > ----------------------------------------------------------------------
>> > diff --git a/log4j-core/src/test/resources/BlockingQueueFactory-LinkedTransferQueue.xml b/log4j-core/src/test/resources/BlockingQueueFactory-LinkedTransferQueue.xml
>> > new file mode 100644
>> > index 0000000..13063d3
>> > --- /dev/null
>> > +++ b/log4j-core/src/test/resources/BlockingQueueFactory-LinkedTransferQueue.xml
>> > @@ -0,0 +1,40 @@
>> > +<?xml version="1.0" encoding="UTF-8"?>
>> > +<!--
>> > + Licensed to the Apache Software Foundation (ASF) under one or more
>> > + contributor license agreements.  See the NOTICE file distributed with
>> > + this work for additional information regarding copyright ownership.
>> > + The ASF licenses this file to You under the Apache License, Version 2.0
>> > + (the "License"); you may not use this file except in compliance with
>> > + the License.  You may obtain a copy of the License at
>> > +
>> > +      http://www.apache.org/licenses/LICENSE-2.0 <http://www.apache.org/licenses/LICENSE-2.0>
>> > +
>> > + Unless required by applicable law or agreed to in writing, software
>> > + distributed under the License is distributed on an "AS IS" BASIS,
>> > + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
>> > + See the License for the specific language governing permissions and
>> > + limitations under the License.
>> > +
>> > +-->
>> > +<Configuration status="OFF" name="LinkedTransferQueueFactory">
>> > +
>> > +  <Appenders>
>> > +    <Console name="STDOUT">
>> > +      <PatternLayout pattern="%m%n"/>
>> > +    </Console>
>> > +    <List name="List">
>> > +      <PatternLayout pattern="%C %M %m"/>
>> > +    </List>
>> > +    <Async name="Async" includeLocation="true" error-ref="STDOUT">
>> > +      <AppenderRef ref="List"/>
>> > +      <LinkedTransferQueue/>
>> > +    </Async>
>> > +  </Appenders>
>> > +
>> > +  <Loggers>
>> > +    <Root level="debug">
>> > +      <AppenderRef ref="Async"/>
>> > +    </Root>
>> > +  </Loggers>
>> > +
>> > +</Configuration>
>> > \ No newline at end of file
>> >
>> >
>> 
>> 
>> 
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: log4j-dev-unsubscribe@logging.apache.org <ma...@logging.apache.org>
>> For additional commands, e-mail: log4j-dev-help@logging.apache.org <ma...@logging.apache.org>
>> 
>> 
>> 
>> 
>> -- 
>> E-Mail: garydgregory@gmail.com <ma...@gmail.com> | ggregory@apache.org  <ma...@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 <http://garygregory.wordpress.com/> 
>> Home: http://garygregory.com/ <http://garygregory.com/>
>> Tweet! http://twitter.com/GaryGregory <http://twitter.com/GaryGregory>
> 
> 
> 
> -- 
> E-Mail: garydgregory@gmail.com <ma...@gmail.com> | ggregory@apache.org  <ma...@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 <http://garygregory.wordpress.com/> 
> Home: http://garygregory.com/ <http://garygregory.com/>
> Tweet! http://twitter.com/GaryGregory <http://twitter.com/GaryGregory>

Re: [13/36] logging-log4j2 git commit: Convert BlockingQueueFactory into a plugin element

Posted by Gary Gregory <ga...@gmail.com>.
Ah, no, Java 8:

Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5;
2015-11-10T08:41:47-08:00)
Maven home: E:\Java\apache-maven-3.3.9
Java version: 1.8.0_101, vendor: Oracle Corporation
Java home: C:\Program Files\Java\jdk1.8.0_101\jre
Default locale: en_US, platform encoding: Cp1252
OS name: "windows 7", version: "6.1", arch: "amd64", family: "dos"

Gary

On Mon, Sep 5, 2016 at 5:32 PM, Ralph Goers <ra...@dslextreme.com>
wrote:

> And you are building with Java 7?
>
> Ralph
>
> On Sep 5, 2016, at 2:18 PM, Gary Gregory <ga...@gmail.com> wrote:
>
> Locally, I get:
>
> Failed tests:
>   RoutingAppenderWithPurgingTest.routingTest:91 Incorrect number of
> appenders with IdlePurgePolicy. expected:<3> but was:<1>
>
> Gary
>
> On Mon, Sep 5, 2016 at 12:54 PM, Ralph Goers <ra...@dslextreme.com>
> wrote:
>
>> For the record, I am voting -1 on this commit.  It breaks the build
>> because the DisruptorBlockingQueueFactory has a dependency that requires
>> Java 8. The 2.7 release is blocked until this is corrected.
>>
>> Ralph
>>
>> > On Sep 4, 2016, at 11:38 AM, mattsicker@apache.org wrote:
>> >
>> > Convert BlockingQueueFactory into a plugin element
>> >
>> > Related to LOG4J2-1430.
>> >
>> >
>> > Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
>> > Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit
>> /65ec9bce
>> > Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/6
>> 5ec9bce
>> > Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/6
>> 5ec9bce
>> >
>> > Branch: refs/heads/master
>> > Commit: 65ec9bcef74dc30ecab9c2091c6e0638d53490d8
>> > Parents: 0848d7a
>> > Author: Matt Sicker <bo...@gmail.com>
>> > Authored: Fri Jun 17 18:51:08 2016 -0500
>> > Committer: Matt Sicker <bo...@gmail.com>
>> > Committed: Fri Jun 17 18:51:08 2016 -0500
>> >
>> > ----------------------------------------------------------------------
>> > .../log4j/core/appender/AsyncAppender.java      | 24 +++++++++---
>> > .../core/async/ArrayBlockingQueueFactory.java   | 10 +++++
>> > .../log4j/core/async/BlockingQueueFactory.java  | 13 ++++++-
>> > .../async/DisruptorBlockingQueueFactory.java    | 11 +++++-
>> > .../core/async/LinkedTransferQueueFactory.java  | 10 +++++
>> > .../log4j/core/appender/AsyncAppenderTest.java  | 16 ++++----
>> > .../BlockingQueueFactory-ArrayBlockingQueue.xml | 40
>> ++++++++++++++++++++
>> > ...ckingQueueFactory-DisruptorBlockingQueue.xml | 40
>> ++++++++++++++++++++
>> > ...BlockingQueueFactory-LinkedTransferQueue.xml | 40
>> ++++++++++++++++++++
>> > 9 files changed, 189 insertions(+), 15 deletions(-)
>> > ----------------------------------------------------------------------
>> >
>> >
>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>> 5ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/co
>> re/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/app
>> ender/AsyncAppender.java
>> > index 3c9c37c..dee5e50 100644
>> > --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/app
>> ender/AsyncAppender.java
>> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/app
>> ender/AsyncAppender.java
>> > @@ -26,8 +26,11 @@ 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;
>> > +import org.apache.logging.log4j.core.async.ArrayBlockingQueueFactory;
>> > import org.apache.logging.log4j.core.async.AsyncQueueFullPolicy;
>> > import org.apache.logging.log4j.core.async.AsyncQueueFullPolicyFactory;
>> > +import org.apache.logging.log4j.core.async.BlockingQueueFactory;
>> > +import org.apache.logging.log4j.core.async.BlockingQueueFactoryUtil;
>> > import org.apache.logging.log4j.core.async.DiscardingAsyncQueueFull
>> Policy;
>> > import org.apache.logging.log4j.core.async.EventRoute;
>> > import org.apache.logging.log4j.core.config.AppenderControl;
>> > @@ -42,7 +45,6 @@ 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.validation.cons
>> traints.Required;
>> > import org.apache.logging.log4j.core.impl.Log4jLogEvent;
>> > -import org.apache.logging.log4j.core.async.BlockingQueueFactoryUtil;
>> > import org.apache.logging.log4j.core.util.Constants;
>> >
>> > /**
>> > @@ -73,8 +75,8 @@ public final class AsyncAppender extends
>> AbstractAppender {
>> >
>> >     private AsyncAppender(final String name, final Filter filter, final
>> AppenderRef[] appenderRefs,
>> >                           final String errorRef, final int queueSize,
>> final boolean blocking,
>> > -                          final boolean ignoreExceptions,
>> > -                          final long shutdownTimeout, final
>> Configuration config, final boolean includeLocation) {
>> > +                          final boolean ignoreExceptions, final long
>> shutdownTimeout, final Configuration config,
>> > +                          final boolean includeLocation, final
>> BlockingQueueFactory<LogEvent> blockingQueueFactory) {
>> >         super(name, filter, null, ignoreExceptions);
>> >         this.queue = BlockingQueueFactoryUtil.<LogE
>> vent>getBlockingQueueFactory().create(queueSize);
>> >         this.queueSize = queueSize;
>> > @@ -217,7 +219,9 @@ public final class AsyncAppender extends
>> AbstractAppender {
>> >     }
>> >
>> >     /**
>> > -     * Create an AsyncAppender.
>> > +     * Create an AsyncAppender. This method is retained for backwards
>> compatibility. New code should use the
>> > +     * {@link Builder} instead. This factory will use {@link
>> ArrayBlockingQueueFactory} by default as was the behavior
>> > +     * pre-2.7.
>> >      *
>> >      * @param appenderRefs     The Appenders to reference.
>> >      * @param errorRef         An optional Appender to write to if the
>> queue is full or other errors occur.
>> > @@ -247,7 +251,7 @@ public final class AsyncAppender extends
>> AbstractAppender {
>> >         }
>> >
>> >         return new AsyncAppender(name, filter, appenderRefs, errorRef,
>> size, blocking, ignoreExceptions,
>> > -            shutdownTimeout, config, includeLocation);
>> > +            shutdownTimeout, config, includeLocation, new
>> ArrayBlockingQueueFactory<LogEvent>());
>> >     }
>> >
>> >     @PluginBuilderFactory
>> > @@ -290,6 +294,9 @@ public final class AsyncAppender extends
>> AbstractAppender {
>> >         @PluginBuilderAttribute
>> >         private boolean ignoreExceptions = true;
>> >
>> > +        @PluginElement(BlockingQueueFactory.ELEMENT_TYPE)
>> > +        private BlockingQueueFactory<LogEvent> blockingQueueFactory =
>> new ArrayBlockingQueueFactory<>();
>> > +
>> >         public Builder setAppenderRefs(AppenderRef[] appenderRefs) {
>> >             this.appenderRefs = appenderRefs;
>> >             return this;
>> > @@ -340,10 +347,15 @@ public final class AsyncAppender extends
>> AbstractAppender {
>> >             return this;
>> >         }
>> >
>> > +        public Builder setBlockingQueueFactory(final
>> BlockingQueueFactory<LogEvent> blockingQueueFactory) {
>> > +            this.blockingQueueFactory = blockingQueueFactory;
>> > +            return this;
>> > +        }
>> > +
>> >         @Override
>> >         public AsyncAppender build() {
>> >             return new AsyncAppender(name, filter, appenderRefs,
>> errorRef, bufferSize, blocking, ignoreExceptions,
>> > -                shutdownTimeout, configuration, includeLocation);
>> > +                shutdownTimeout, configuration, includeLocation,
>> blockingQueueFactory);
>> >         }
>> >     }
>> >
>> >
>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>> 5ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/co
>> re/async/ArrayBlockingQueueFactory.java
>> > ----------------------------------------------------------------------
>> > diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>> nc/ArrayBlockingQueueFactory.java b/log4j-core/src/main/java/org
>> /apache/logging/log4j/core/async/ArrayBlockingQueueFactory.java
>> > index e9c99b8..dcad78a 100644
>> > --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>> nc/ArrayBlockingQueueFactory.java
>> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>> nc/ArrayBlockingQueueFactory.java
>> > @@ -3,14 +3,24 @@ package org.apache.logging.log4j.core.async;
>> > import java.util.concurrent.ArrayBlockingQueue;
>> > import java.util.concurrent.BlockingQueue;
>> >
>> > +import org.apache.logging.log4j.core.config.Node;
>> > +import org.apache.logging.log4j.core.config.plugins.Plugin;
>> > +import org.apache.logging.log4j.core.config.plugins.PluginFactory;
>> > +
>> > /**
>> >  * Factory for creating instances of {@link ArrayBlockingQueue}.
>> >  *
>> >  * @since 2.7
>> >  */
>> > +@Plugin(name = "ArrayBlockingQueue", category = Node.CATEGORY,
>> elementType = BlockingQueueFactory.ELEMENT_TYPE)
>> > public class ArrayBlockingQueueFactory<E> implements
>> BlockingQueueFactory<E> {
>> >     @Override
>> >     public BlockingQueue<E> create(int capacity) {
>> >         return new ArrayBlockingQueue<>(capacity);
>> >     }
>> > +
>> > +    @PluginFactory
>> > +    public static <E> ArrayBlockingQueueFactory<E> createFactory() {
>> > +        return new ArrayBlockingQueueFactory<>();
>> > +    }
>> > }
>> >
>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>> 5ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/co
>> re/async/BlockingQueueFactory.java
>> > ----------------------------------------------------------------------
>> > diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/BlockingQueueFactory.java
>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>> nc/BlockingQueueFactory.java
>> > index ccd1625..5763d1e 100644
>> > --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>> nc/BlockingQueueFactory.java
>> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>> nc/BlockingQueueFactory.java
>> > @@ -9,7 +9,18 @@ import java.util.concurrent.BlockingQueue;
>> >  */
>> > public interface BlockingQueueFactory<E> {
>> >
>> > -    String PROPERTY = "log4j.BlockingQueueFactory";
>> > +    /**
>> > +     * The {@link org.apache.logging.log4j.core.
>> config.plugins.Plugin#elementType() element type} to use for plugins
>> > +     * implementing this interface.
>> > +     */
>> > +    String ELEMENT_TYPE = "BlockingQueueFactory";
>> >
>> > +    /**
>> > +     * Creates a new BlockingQueue with the specified maximum
>> capacity. Note that not all implementations of
>> > +     * BlockingQueue support a bounded capacity in which case the
>> value is ignored.
>> > +     *
>> > +     * @param capacity maximum size of the queue if supported
>> > +     * @return a new BlockingQueue
>> > +     */
>> >     BlockingQueue<E> create(int capacity);
>> > }
>> >
>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>> 5ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/co
>> re/async/DisruptorBlockingQueueFactory.java
>> > ----------------------------------------------------------------------
>> > diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>> nc/DisruptorBlockingQueueFactory.java b/log4j-core/src/main/java/org
>> /apache/logging/log4j/core/async/DisruptorBlockingQueueFactory.java
>> > index 8fb3707..add375d 100644
>> > --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>> nc/DisruptorBlockingQueueFactory.java
>> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>> nc/DisruptorBlockingQueueFactory.java
>> > @@ -3,15 +3,24 @@ package org.apache.logging.log4j.core.async;
>> > import java.util.concurrent.BlockingQueue;
>> >
>> > import com.conversantmedia.util.concurrent.DisruptorBlockingQueue;
>> > +import org.apache.logging.log4j.core.config.Node;
>> > +import org.apache.logging.log4j.core.config.plugins.Plugin;
>> > +import org.apache.logging.log4j.core.config.plugins.PluginFactory;
>> >
>> > /**
>> >  * Factory for creating instances of {@link DisruptorBlockingQueue}.
>> >  *
>> >  * @since 2.7
>> >  */
>> > +@Plugin(name = "DisruptorBlockingQueue", category = Node.CATEGORY,
>> elementType = BlockingQueueFactory.ELEMENT_TYPE)
>> > public class DisruptorBlockingQueueFactory<E> implements
>> BlockingQueueFactory<E> {
>> >     @Override
>> >     public BlockingQueue<E> create(int capacity) {
>> > -        return new DisruptorBlockingQueue<E>(capacity);
>> > +        return new DisruptorBlockingQueue<>(capacity);
>> > +    }
>> > +
>> > +    @PluginFactory
>> > +    public static <E> DisruptorBlockingQueueFactory<E>
>> createFactory() {
>> > +        return new DisruptorBlockingQueueFactory<>();
>> >     }
>> > }
>> >
>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>> 5ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/co
>> re/async/LinkedTransferQueueFactory.java
>> > ----------------------------------------------------------------------
>> > diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>> nc/LinkedTransferQueueFactory.java b/log4j-core/src/main/java/org
>> /apache/logging/log4j/core/async/LinkedTransferQueueFactory.java
>> > index 862fab3..6ab24e7 100644
>> > --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>> nc/LinkedTransferQueueFactory.java
>> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/asy
>> nc/LinkedTransferQueueFactory.java
>> > @@ -20,14 +20,24 @@ package org.apache.logging.log4j.core.async;
>> > import java.util.concurrent.BlockingQueue;
>> > import java.util.concurrent.LinkedTransferQueue;
>> >
>> > +import org.apache.logging.log4j.core.config.Node;
>> > +import org.apache.logging.log4j.core.config.plugins.Plugin;
>> > +import org.apache.logging.log4j.core.config.plugins.PluginFactory;
>> > +
>> > /**
>> >  * Factory for creating instances of {@link LinkedTransferQueue}.
>> >  *
>> >  * @since 2.7
>> >  */
>> > +@Plugin(name = "LinkedTransferQueue", category = Node.CATEGORY,
>> elementType = BlockingQueueFactory.ELEMENT_TYPE)
>> > public class LinkedTransferQueueFactory<E> implements
>> BlockingQueueFactory<E> {
>> >     @Override
>> >     public BlockingQueue<E> create(int capacity) {
>> >         return new LinkedTransferQueue<>();
>> >     }
>> > +
>> > +    @PluginFactory
>> > +    public static <E> LinkedTransferQueueFactory<E> createFactory() {
>> > +        return new LinkedTransferQueueFactory<>();
>> > +    }
>> > }
>> >
>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>> 5ec9bce/log4j-core/src/test/java/org/apache/logging/log4j/co
>> re/appender/AsyncAppenderTest.java
>> > ----------------------------------------------------------------------
>> > diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/AsyncAppenderTest.java
>> b/log4j-core/src/test/java/org/apache/logging/log4j/core/app
>> ender/AsyncAppenderTest.java
>> > index 3066f38..076fdd0 100644
>> > --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/app
>> ender/AsyncAppenderTest.java
>> > +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/app
>> ender/AsyncAppenderTest.java
>> > @@ -41,19 +41,21 @@ import static org.junit.Assert.*;
>> >  */
>> > @RunWith(Parameterized.class)
>> > public class AsyncAppenderTest {
>> > -    private static final String CONFIG = "log4j-asynch.xml";
>> >
>> >     @Parameterized.Parameters
>> >     public static Object[] data() {
>> > -        return new Class<?>[]{
>> > -            ArrayBlockingQueueFactory.class,
>> > -            DisruptorBlockingQueueFactory.class,
>> > -            LinkedTransferQueueFactory.class
>> > +        return new String[]{
>> > +            // default async config uses array blocking queue
>> > +            "log4j-asynch.xml",
>> > +            // override default blocking queue implementations
>> > +            "BlockingQueueFactory-ArrayBlockingQueue.xml",
>> > +            "BlockingQueueFactory-DisruptorBlockingQueue.xml",
>> > +            "BlockingQueueFactory-LinkedTransferQueue.xml"
>> >         };
>> >     }
>> >
>> > -    public AsyncAppenderTest(final Class<? extends
>> BlockingQueueFactory> factory) {
>> > -        context = new LoggerContextRule(CONFIG).with
>> SystemProperty(BlockingQueueFactory.PROPERTY, factory.getName());
>> > +    public AsyncAppenderTest(final String configFileName) {
>> > +        context = new LoggerContextRule(configFileName);
>> >     }
>> >
>> >     @Rule
>> >
>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>> 5ec9bce/log4j-core/src/test/resources/BlockingQueueFactory-A
>> rrayBlockingQueue.xml
>> > ----------------------------------------------------------------------
>> > diff --git a/log4j-core/src/test/resources/BlockingQueueFactory-ArrayBlockingQueue.xml
>> b/log4j-core/src/test/resources/BlockingQueueFactory-ArrayBl
>> ockingQueue.xml
>> > new file mode 100644
>> > index 0000000..e8bbfa6
>> > --- /dev/null
>> > +++ b/log4j-core/src/test/resources/BlockingQueueFactory-ArrayBl
>> ockingQueue.xml
>> > @@ -0,0 +1,40 @@
>> > +<?xml version="1.0" encoding="UTF-8"?>
>> > +<!--
>> > + Licensed to the Apache Software Foundation (ASF) under one or more
>> > + contributor license agreements.  See the NOTICE file distributed with
>> > + this work for additional information regarding copyright ownership.
>> > + The ASF licenses this file to You under the Apache License, Version
>> 2.0
>> > + (the "License"); you may not use this file except in compliance with
>> > + the License.  You may obtain a copy of the License at
>> > +
>> > +      http://www.apache.org/licenses/LICENSE-2.0
>> > +
>> > + Unless required by applicable law or agreed to in writing, software
>> > + distributed under the License is distributed on an "AS IS" BASIS,
>> > + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>> implied.
>> > + See the License for the specific language governing permissions and
>> > + limitations under the License.
>> > +
>> > +-->
>> > +<Configuration status="OFF" name="ArrayBlockingQueueFactory">
>> > +
>> > +  <Appenders>
>> > +    <Console name="STDOUT">
>> > +      <PatternLayout pattern="%m%n"/>
>> > +    </Console>
>> > +    <List name="List">
>> > +      <PatternLayout pattern="%C %M %m"/>
>> > +    </List>
>> > +    <Async name="Async" includeLocation="true" error-ref="STDOUT">
>> > +      <AppenderRef ref="List"/>
>> > +      <ArrayBlockingQueue/>
>> > +    </Async>
>> > +  </Appenders>
>> > +
>> > +  <Loggers>
>> > +    <Root level="debug">
>> > +      <AppenderRef ref="Async"/>
>> > +    </Root>
>> > +  </Loggers>
>> > +
>> > +</Configuration>
>> > \ No newline at end of file
>> >
>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>> 5ec9bce/log4j-core/src/test/resources/BlockingQueueFactory-D
>> isruptorBlockingQueue.xml
>> > ----------------------------------------------------------------------
>> > diff --git a/log4j-core/src/test/resources/BlockingQueueFactory-DisruptorBlockingQueue.xml
>> b/log4j-core/src/test/resources/BlockingQueueFactory-Disrupt
>> orBlockingQueue.xml
>> > new file mode 100644
>> > index 0000000..268cca7
>> > --- /dev/null
>> > +++ b/log4j-core/src/test/resources/BlockingQueueFactory-Disrupt
>> orBlockingQueue.xml
>> > @@ -0,0 +1,40 @@
>> > +<?xml version="1.0" encoding="UTF-8"?>
>> > +<!--
>> > + Licensed to the Apache Software Foundation (ASF) under one or more
>> > + contributor license agreements.  See the NOTICE file distributed with
>> > + this work for additional information regarding copyright ownership.
>> > + The ASF licenses this file to You under the Apache License, Version
>> 2.0
>> > + (the "License"); you may not use this file except in compliance with
>> > + the License.  You may obtain a copy of the License at
>> > +
>> > +      http://www.apache.org/licenses/LICENSE-2.0
>> > +
>> > + Unless required by applicable law or agreed to in writing, software
>> > + distributed under the License is distributed on an "AS IS" BASIS,
>> > + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>> implied.
>> > + See the License for the specific language governing permissions and
>> > + limitations under the License.
>> > +
>> > +-->
>> > +<Configuration status="OFF" name="DisruptorBlockingQueueFactory">
>> > +
>> > +  <Appenders>
>> > +    <Console name="STDOUT">
>> > +      <PatternLayout pattern="%m%n"/>
>> > +    </Console>
>> > +    <List name="List">
>> > +      <PatternLayout pattern="%C %M %m"/>
>> > +    </List>
>> > +    <Async name="Async" includeLocation="true" error-ref="STDOUT">
>> > +      <AppenderRef ref="List"/>
>> > +      <DisruptorBlockingQueue/>
>> > +    </Async>
>> > +  </Appenders>
>> > +
>> > +  <Loggers>
>> > +    <Root level="debug">
>> > +      <AppenderRef ref="Async"/>
>> > +    </Root>
>> > +  </Loggers>
>> > +
>> > +</Configuration>
>> > \ No newline at end of file
>> >
>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
>> 5ec9bce/log4j-core/src/test/resources/BlockingQueueFactory-L
>> inkedTransferQueue.xml
>> > ----------------------------------------------------------------------
>> > diff --git a/log4j-core/src/test/resources/BlockingQueueFactory-LinkedTransferQueue.xml
>> b/log4j-core/src/test/resources/BlockingQueueFactory-LinkedT
>> ransferQueue.xml
>> > new file mode 100644
>> > index 0000000..13063d3
>> > --- /dev/null
>> > +++ b/log4j-core/src/test/resources/BlockingQueueFactory-LinkedT
>> ransferQueue.xml
>> > @@ -0,0 +1,40 @@
>> > +<?xml version="1.0" encoding="UTF-8"?>
>> > +<!--
>> > + Licensed to the Apache Software Foundation (ASF) under one or more
>> > + contributor license agreements.  See the NOTICE file distributed with
>> > + this work for additional information regarding copyright ownership.
>> > + The ASF licenses this file to You under the Apache License, Version
>> 2.0
>> > + (the "License"); you may not use this file except in compliance with
>> > + the License.  You may obtain a copy of the License at
>> > +
>> > +      http://www.apache.org/licenses/LICENSE-2.0
>> > +
>> > + Unless required by applicable law or agreed to in writing, software
>> > + distributed under the License is distributed on an "AS IS" BASIS,
>> > + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>> implied.
>> > + See the License for the specific language governing permissions and
>> > + limitations under the License.
>> > +
>> > +-->
>> > +<Configuration status="OFF" name="LinkedTransferQueueFactory">
>> > +
>> > +  <Appenders>
>> > +    <Console name="STDOUT">
>> > +      <PatternLayout pattern="%m%n"/>
>> > +    </Console>
>> > +    <List name="List">
>> > +      <PatternLayout pattern="%C %M %m"/>
>> > +    </List>
>> > +    <Async name="Async" includeLocation="true" error-ref="STDOUT">
>> > +      <AppenderRef ref="List"/>
>> > +      <LinkedTransferQueue/>
>> > +    </Async>
>> > +  </Appenders>
>> > +
>> > +  <Loggers>
>> > +    <Root level="debug">
>> > +      <AppenderRef ref="Async"/>
>> > +    </Root>
>> > +  </Loggers>
>> > +
>> > +</Configuration>
>> > \ No newline at end of file
>> >
>> >
>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: log4j-dev-unsubscribe@logging.apache.org
>> For additional commands, e-mail: log4j-dev-help@logging.apache.org
>>
>>
>
>
> --
> 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
>
>
>


-- 
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: [13/36] logging-log4j2 git commit: Convert BlockingQueueFactory into a plugin element

Posted by Ralph Goers <ra...@dslextreme.com>.
And you are building with Java 7?

Ralph

> On Sep 5, 2016, at 2:18 PM, Gary Gregory <ga...@gmail.com> wrote:
> 
> Locally, I get:
> 
> Failed tests:
>   RoutingAppenderWithPurgingTest.routingTest:91 Incorrect number of appenders with IdlePurgePolicy. expected:<3> but was:<1>
> 
> Gary
> 
> On Mon, Sep 5, 2016 at 12:54 PM, Ralph Goers <ralph.goers@dslextreme.com <ma...@dslextreme.com>> wrote:
> For the record, I am voting -1 on this commit.  It breaks the build because the DisruptorBlockingQueueFactory has a dependency that requires Java 8. The 2.7 release is blocked until this is corrected.
> 
> Ralph
> 
> > On Sep 4, 2016, at 11:38 AM, mattsicker@apache.org <ma...@apache.org> wrote:
> >
> > Convert BlockingQueueFactory into a plugin element
> >
> > Related to LOG4J2-1430.
> >
> >
> > Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo <http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo>
> > Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/65ec9bce <http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/65ec9bce>
> > Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/65ec9bce <http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/65ec9bce>
> > Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/65ec9bce <http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/65ec9bce>
> >
> > Branch: refs/heads/master
> > Commit: 65ec9bcef74dc30ecab9c2091c6e0638d53490d8
> > Parents: 0848d7a
> > Author: Matt Sicker <boards@gmail.com <ma...@gmail.com>>
> > Authored: Fri Jun 17 18:51:08 2016 -0500
> > Committer: Matt Sicker <boards@gmail.com <ma...@gmail.com>>
> > Committed: Fri Jun 17 18:51:08 2016 -0500
> >
> > ----------------------------------------------------------------------
> > .../log4j/core/appender/AsyncAppender.java      | 24 +++++++++---
> > .../core/async/ArrayBlockingQueueFactory.java   | 10 +++++
> > .../log4j/core/async/BlockingQueueFactory.java  | 13 ++++++-
> > .../async/DisruptorBlockingQueueFactory.java    | 11 +++++-
> > .../core/async/LinkedTransferQueueFactory.java  | 10 +++++
> > .../log4j/core/appender/AsyncAppenderTest.java  | 16 ++++----
> > .../BlockingQueueFactory-ArrayBlockingQueue.xml | 40 ++++++++++++++++++++
> > ...ckingQueueFactory-DisruptorBlockingQueue.xml | 40 ++++++++++++++++++++
> > ...BlockingQueueFactory-LinkedTransferQueue.xml | 40 ++++++++++++++++++++
> > 9 files changed, 189 insertions(+), 15 deletions(-)
> > ----------------------------------------------------------------------
> >
> >
> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/65ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AsyncAppender.java <http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/65ec9bce/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 3c9c37c..dee5e50 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
> > @@ -26,8 +26,11 @@ 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;
> > +import org.apache.logging.log4j.core.async.ArrayBlockingQueueFactory;
> > import org.apache.logging.log4j.core.async.AsyncQueueFullPolicy;
> > import org.apache.logging.log4j.core.async.AsyncQueueFullPolicyFactory;
> > +import org.apache.logging.log4j.core.async.BlockingQueueFactory;
> > +import org.apache.logging.log4j.core.async.BlockingQueueFactoryUtil;
> > import org.apache.logging.log4j.core.async.DiscardingAsyncQueueFullPolicy;
> > import org.apache.logging.log4j.core.async.EventRoute;
> > import org.apache.logging.log4j.core.config.AppenderControl;
> > @@ -42,7 +45,6 @@ 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.validation.constraints.Required;
> > import org.apache.logging.log4j.core.impl.Log4jLogEvent;
> > -import org.apache.logging.log4j.core.async.BlockingQueueFactoryUtil;
> > import org.apache.logging.log4j.core.util.Constants;
> >
> > /**
> > @@ -73,8 +75,8 @@ public final class AsyncAppender extends AbstractAppender {
> >
> >     private AsyncAppender(final String name, final Filter filter, final AppenderRef[] appenderRefs,
> >                           final String errorRef, final int queueSize, final boolean blocking,
> > -                          final boolean ignoreExceptions,
> > -                          final long shutdownTimeout, final Configuration config, final boolean includeLocation) {
> > +                          final boolean ignoreExceptions, final long shutdownTimeout, final Configuration config,
> > +                          final boolean includeLocation, final BlockingQueueFactory<LogEvent> blockingQueueFactory) {
> >         super(name, filter, null, ignoreExceptions);
> >         this.queue = BlockingQueueFactoryUtil.<LogEvent>getBlockingQueueFactory().create(queueSize);
> >         this.queueSize = queueSize;
> > @@ -217,7 +219,9 @@ public final class AsyncAppender extends AbstractAppender {
> >     }
> >
> >     /**
> > -     * Create an AsyncAppender.
> > +     * Create an AsyncAppender. This method is retained for backwards compatibility. New code should use the
> > +     * {@link Builder} instead. This factory will use {@link ArrayBlockingQueueFactory} by default as was the behavior
> > +     * pre-2.7.
> >      *
> >      * @param appenderRefs     The Appenders to reference.
> >      * @param errorRef         An optional Appender to write to if the queue is full or other errors occur.
> > @@ -247,7 +251,7 @@ public final class AsyncAppender extends AbstractAppender {
> >         }
> >
> >         return new AsyncAppender(name, filter, appenderRefs, errorRef, size, blocking, ignoreExceptions,
> > -            shutdownTimeout, config, includeLocation);
> > +            shutdownTimeout, config, includeLocation, new ArrayBlockingQueueFactory<LogEvent>());
> >     }
> >
> >     @PluginBuilderFactory
> > @@ -290,6 +294,9 @@ public final class AsyncAppender extends AbstractAppender {
> >         @PluginBuilderAttribute
> >         private boolean ignoreExceptions = true;
> >
> > +        @PluginElement(BlockingQueueFactory.ELEMENT_TYPE)
> > +        private BlockingQueueFactory<LogEvent> blockingQueueFactory = new ArrayBlockingQueueFactory<>();
> > +
> >         public Builder setAppenderRefs(AppenderRef[] appenderRefs) {
> >             this.appenderRefs = appenderRefs;
> >             return this;
> > @@ -340,10 +347,15 @@ public final class AsyncAppender extends AbstractAppender {
> >             return this;
> >         }
> >
> > +        public Builder setBlockingQueueFactory(final BlockingQueueFactory<LogEvent> blockingQueueFactory) {
> > +            this.blockingQueueFactory = blockingQueueFactory;
> > +            return this;
> > +        }
> > +
> >         @Override
> >         public AsyncAppender build() {
> >             return new AsyncAppender(name, filter, appenderRefs, errorRef, bufferSize, blocking, ignoreExceptions,
> > -                shutdownTimeout, configuration, includeLocation);
> > +                shutdownTimeout, configuration, includeLocation, blockingQueueFactory);
> >         }
> >     }
> >
> >
> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/65ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/core/async/ArrayBlockingQueueFactory.java <http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/65ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/core/async/ArrayBlockingQueueFactory.java>
> > ----------------------------------------------------------------------
> > diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/ArrayBlockingQueueFactory.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/ArrayBlockingQueueFactory.java
> > index e9c99b8..dcad78a 100644
> > --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/ArrayBlockingQueueFactory.java
> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/ArrayBlockingQueueFactory.java
> > @@ -3,14 +3,24 @@ package org.apache.logging.log4j.core.async;
> > import java.util.concurrent.ArrayBlockingQueue;
> > import java.util.concurrent.BlockingQueue;
> >
> > +import org.apache.logging.log4j.core.config.Node;
> > +import org.apache.logging.log4j.core.config.plugins.Plugin;
> > +import org.apache.logging.log4j.core.config.plugins.PluginFactory;
> > +
> > /**
> >  * Factory for creating instances of {@link ArrayBlockingQueue}.
> >  *
> >  * @since 2.7
> >  */
> > +@Plugin(name = "ArrayBlockingQueue", category = Node.CATEGORY, elementType = BlockingQueueFactory.ELEMENT_TYPE)
> > public class ArrayBlockingQueueFactory<E> implements BlockingQueueFactory<E> {
> >     @Override
> >     public BlockingQueue<E> create(int capacity) {
> >         return new ArrayBlockingQueue<>(capacity);
> >     }
> > +
> > +    @PluginFactory
> > +    public static <E> ArrayBlockingQueueFactory<E> createFactory() {
> > +        return new ArrayBlockingQueueFactory<>();
> > +    }
> > }
> >
> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/65ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/core/async/BlockingQueueFactory.java <http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/65ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/core/async/BlockingQueueFactory.java>
> > ----------------------------------------------------------------------
> > diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/BlockingQueueFactory.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/BlockingQueueFactory.java
> > index ccd1625..5763d1e 100644
> > --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/BlockingQueueFactory.java
> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/BlockingQueueFactory.java
> > @@ -9,7 +9,18 @@ import java.util.concurrent.BlockingQueue;
> >  */
> > public interface BlockingQueueFactory<E> {
> >
> > -    String PROPERTY = "log4j.BlockingQueueFactory";
> > +    /**
> > +     * The {@link org.apache.logging.log4j.core.config.plugins.Plugin#elementType() element type} to use for plugins
> > +     * implementing this interface.
> > +     */
> > +    String ELEMENT_TYPE = "BlockingQueueFactory";
> >
> > +    /**
> > +     * Creates a new BlockingQueue with the specified maximum capacity. Note that not all implementations of
> > +     * BlockingQueue support a bounded capacity in which case the value is ignored.
> > +     *
> > +     * @param capacity maximum size of the queue if supported
> > +     * @return a new BlockingQueue
> > +     */
> >     BlockingQueue<E> create(int capacity);
> > }
> >
> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/65ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/core/async/DisruptorBlockingQueueFactory.java <http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/65ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/core/async/DisruptorBlockingQueueFactory.java>
> > ----------------------------------------------------------------------
> > diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/DisruptorBlockingQueueFactory.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/DisruptorBlockingQueueFactory.java
> > index 8fb3707..add375d 100644
> > --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/DisruptorBlockingQueueFactory.java
> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/DisruptorBlockingQueueFactory.java
> > @@ -3,15 +3,24 @@ package org.apache.logging.log4j.core.async;
> > import java.util.concurrent.BlockingQueue;
> >
> > import com.conversantmedia.util.concurrent.DisruptorBlockingQueue;
> > +import org.apache.logging.log4j.core.config.Node;
> > +import org.apache.logging.log4j.core.config.plugins.Plugin;
> > +import org.apache.logging.log4j.core.config.plugins.PluginFactory;
> >
> > /**
> >  * Factory for creating instances of {@link DisruptorBlockingQueue}.
> >  *
> >  * @since 2.7
> >  */
> > +@Plugin(name = "DisruptorBlockingQueue", category = Node.CATEGORY, elementType = BlockingQueueFactory.ELEMENT_TYPE)
> > public class DisruptorBlockingQueueFactory<E> implements BlockingQueueFactory<E> {
> >     @Override
> >     public BlockingQueue<E> create(int capacity) {
> > -        return new DisruptorBlockingQueue<E>(capacity);
> > +        return new DisruptorBlockingQueue<>(capacity);
> > +    }
> > +
> > +    @PluginFactory
> > +    public static <E> DisruptorBlockingQueueFactory<E> createFactory() {
> > +        return new DisruptorBlockingQueueFactory<>();
> >     }
> > }
> >
> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/65ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/core/async/LinkedTransferQueueFactory.java <http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/65ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/core/async/LinkedTransferQueueFactory.java>
> > ----------------------------------------------------------------------
> > diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/LinkedTransferQueueFactory.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/LinkedTransferQueueFactory.java
> > index 862fab3..6ab24e7 100644
> > --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/LinkedTransferQueueFactory.java
> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/LinkedTransferQueueFactory.java
> > @@ -20,14 +20,24 @@ package org.apache.logging.log4j.core.async;
> > import java.util.concurrent.BlockingQueue;
> > import java.util.concurrent.LinkedTransferQueue;
> >
> > +import org.apache.logging.log4j.core.config.Node;
> > +import org.apache.logging.log4j.core.config.plugins.Plugin;
> > +import org.apache.logging.log4j.core.config.plugins.PluginFactory;
> > +
> > /**
> >  * Factory for creating instances of {@link LinkedTransferQueue}.
> >  *
> >  * @since 2.7
> >  */
> > +@Plugin(name = "LinkedTransferQueue", category = Node.CATEGORY, elementType = BlockingQueueFactory.ELEMENT_TYPE)
> > public class LinkedTransferQueueFactory<E> implements BlockingQueueFactory<E> {
> >     @Override
> >     public BlockingQueue<E> create(int capacity) {
> >         return new LinkedTransferQueue<>();
> >     }
> > +
> > +    @PluginFactory
> > +    public static <E> LinkedTransferQueueFactory<E> createFactory() {
> > +        return new LinkedTransferQueueFactory<>();
> > +    }
> > }
> >
> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/65ec9bce/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/AsyncAppenderTest.java <http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/65ec9bce/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/AsyncAppenderTest.java>
> > ----------------------------------------------------------------------
> > diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/AsyncAppenderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/AsyncAppenderTest.java
> > index 3066f38..076fdd0 100644
> > --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/AsyncAppenderTest.java
> > +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/AsyncAppenderTest.java
> > @@ -41,19 +41,21 @@ import static org.junit.Assert.*;
> >  */
> > @RunWith(Parameterized.class)
> > public class AsyncAppenderTest {
> > -    private static final String CONFIG = "log4j-asynch.xml";
> >
> >     @Parameterized.Parameters
> >     public static Object[] data() {
> > -        return new Class<?>[]{
> > -            ArrayBlockingQueueFactory.class,
> > -            DisruptorBlockingQueueFactory.class,
> > -            LinkedTransferQueueFactory.class
> > +        return new String[]{
> > +            // default async config uses array blocking queue
> > +            "log4j-asynch.xml",
> > +            // override default blocking queue implementations
> > +            "BlockingQueueFactory-ArrayBlockingQueue.xml",
> > +            "BlockingQueueFactory-DisruptorBlockingQueue.xml",
> > +            "BlockingQueueFactory-LinkedTransferQueue.xml"
> >         };
> >     }
> >
> > -    public AsyncAppenderTest(final Class<? extends BlockingQueueFactory> factory) {
> > -        context = new LoggerContextRule(CONFIG).withSystemProperty(BlockingQueueFactory.PROPERTY, factory.getName());
> > +    public AsyncAppenderTest(final String configFileName) {
> > +        context = new LoggerContextRule(configFileName);
> >     }
> >
> >     @Rule
> >
> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/65ec9bce/log4j-core/src/test/resources/BlockingQueueFactory-ArrayBlockingQueue.xml <http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/65ec9bce/log4j-core/src/test/resources/BlockingQueueFactory-ArrayBlockingQueue.xml>
> > ----------------------------------------------------------------------
> > diff --git a/log4j-core/src/test/resources/BlockingQueueFactory-ArrayBlockingQueue.xml b/log4j-core/src/test/resources/BlockingQueueFactory-ArrayBlockingQueue.xml
> > new file mode 100644
> > index 0000000..e8bbfa6
> > --- /dev/null
> > +++ b/log4j-core/src/test/resources/BlockingQueueFactory-ArrayBlockingQueue.xml
> > @@ -0,0 +1,40 @@
> > +<?xml version="1.0" encoding="UTF-8"?>
> > +<!--
> > + Licensed to the Apache Software Foundation (ASF) under one or more
> > + contributor license agreements.  See the NOTICE file distributed with
> > + this work for additional information regarding copyright ownership.
> > + The ASF licenses this file to You under the Apache License, Version 2.0
> > + (the "License"); you may not use this file except in compliance with
> > + the License.  You may obtain a copy of the License at
> > +
> > +      http://www.apache.org/licenses/LICENSE-2.0 <http://www.apache.org/licenses/LICENSE-2.0>
> > +
> > + Unless required by applicable law or agreed to in writing, software
> > + distributed under the License is distributed on an "AS IS" BASIS,
> > + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
> > + See the License for the specific language governing permissions and
> > + limitations under the License.
> > +
> > +-->
> > +<Configuration status="OFF" name="ArrayBlockingQueueFactory">
> > +
> > +  <Appenders>
> > +    <Console name="STDOUT">
> > +      <PatternLayout pattern="%m%n"/>
> > +    </Console>
> > +    <List name="List">
> > +      <PatternLayout pattern="%C %M %m"/>
> > +    </List>
> > +    <Async name="Async" includeLocation="true" error-ref="STDOUT">
> > +      <AppenderRef ref="List"/>
> > +      <ArrayBlockingQueue/>
> > +    </Async>
> > +  </Appenders>
> > +
> > +  <Loggers>
> > +    <Root level="debug">
> > +      <AppenderRef ref="Async"/>
> > +    </Root>
> > +  </Loggers>
> > +
> > +</Configuration>
> > \ No newline at end of file
> >
> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/65ec9bce/log4j-core/src/test/resources/BlockingQueueFactory-DisruptorBlockingQueue.xml <http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/65ec9bce/log4j-core/src/test/resources/BlockingQueueFactory-DisruptorBlockingQueue.xml>
> > ----------------------------------------------------------------------
> > diff --git a/log4j-core/src/test/resources/BlockingQueueFactory-DisruptorBlockingQueue.xml b/log4j-core/src/test/resources/BlockingQueueFactory-DisruptorBlockingQueue.xml
> > new file mode 100644
> > index 0000000..268cca7
> > --- /dev/null
> > +++ b/log4j-core/src/test/resources/BlockingQueueFactory-DisruptorBlockingQueue.xml
> > @@ -0,0 +1,40 @@
> > +<?xml version="1.0" encoding="UTF-8"?>
> > +<!--
> > + Licensed to the Apache Software Foundation (ASF) under one or more
> > + contributor license agreements.  See the NOTICE file distributed with
> > + this work for additional information regarding copyright ownership.
> > + The ASF licenses this file to You under the Apache License, Version 2.0
> > + (the "License"); you may not use this file except in compliance with
> > + the License.  You may obtain a copy of the License at
> > +
> > +      http://www.apache.org/licenses/LICENSE-2.0 <http://www.apache.org/licenses/LICENSE-2.0>
> > +
> > + Unless required by applicable law or agreed to in writing, software
> > + distributed under the License is distributed on an "AS IS" BASIS,
> > + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
> > + See the License for the specific language governing permissions and
> > + limitations under the License.
> > +
> > +-->
> > +<Configuration status="OFF" name="DisruptorBlockingQueueFactory">
> > +
> > +  <Appenders>
> > +    <Console name="STDOUT">
> > +      <PatternLayout pattern="%m%n"/>
> > +    </Console>
> > +    <List name="List">
> > +      <PatternLayout pattern="%C %M %m"/>
> > +    </List>
> > +    <Async name="Async" includeLocation="true" error-ref="STDOUT">
> > +      <AppenderRef ref="List"/>
> > +      <DisruptorBlockingQueue/>
> > +    </Async>
> > +  </Appenders>
> > +
> > +  <Loggers>
> > +    <Root level="debug">
> > +      <AppenderRef ref="Async"/>
> > +    </Root>
> > +  </Loggers>
> > +
> > +</Configuration>
> > \ No newline at end of file
> >
> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/65ec9bce/log4j-core/src/test/resources/BlockingQueueFactory-LinkedTransferQueue.xml <http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/65ec9bce/log4j-core/src/test/resources/BlockingQueueFactory-LinkedTransferQueue.xml>
> > ----------------------------------------------------------------------
> > diff --git a/log4j-core/src/test/resources/BlockingQueueFactory-LinkedTransferQueue.xml b/log4j-core/src/test/resources/BlockingQueueFactory-LinkedTransferQueue.xml
> > new file mode 100644
> > index 0000000..13063d3
> > --- /dev/null
> > +++ b/log4j-core/src/test/resources/BlockingQueueFactory-LinkedTransferQueue.xml
> > @@ -0,0 +1,40 @@
> > +<?xml version="1.0" encoding="UTF-8"?>
> > +<!--
> > + Licensed to the Apache Software Foundation (ASF) under one or more
> > + contributor license agreements.  See the NOTICE file distributed with
> > + this work for additional information regarding copyright ownership.
> > + The ASF licenses this file to You under the Apache License, Version 2.0
> > + (the "License"); you may not use this file except in compliance with
> > + the License.  You may obtain a copy of the License at
> > +
> > +      http://www.apache.org/licenses/LICENSE-2.0 <http://www.apache.org/licenses/LICENSE-2.0>
> > +
> > + Unless required by applicable law or agreed to in writing, software
> > + distributed under the License is distributed on an "AS IS" BASIS,
> > + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
> > + See the License for the specific language governing permissions and
> > + limitations under the License.
> > +
> > +-->
> > +<Configuration status="OFF" name="LinkedTransferQueueFactory">
> > +
> > +  <Appenders>
> > +    <Console name="STDOUT">
> > +      <PatternLayout pattern="%m%n"/>
> > +    </Console>
> > +    <List name="List">
> > +      <PatternLayout pattern="%C %M %m"/>
> > +    </List>
> > +    <Async name="Async" includeLocation="true" error-ref="STDOUT">
> > +      <AppenderRef ref="List"/>
> > +      <LinkedTransferQueue/>
> > +    </Async>
> > +  </Appenders>
> > +
> > +  <Loggers>
> > +    <Root level="debug">
> > +      <AppenderRef ref="Async"/>
> > +    </Root>
> > +  </Loggers>
> > +
> > +</Configuration>
> > \ No newline at end of file
> >
> >
> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: log4j-dev-unsubscribe@logging.apache.org <ma...@logging.apache.org>
> For additional commands, e-mail: log4j-dev-help@logging.apache.org <ma...@logging.apache.org>
> 
> 
> 
> 
> -- 
> E-Mail: garydgregory@gmail.com <ma...@gmail.com> | ggregory@apache.org  <ma...@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 <http://garygregory.wordpress.com/> 
> Home: http://garygregory.com/ <http://garygregory.com/>
> Tweet! http://twitter.com/GaryGregory <http://twitter.com/GaryGregory>

Re: [13/36] logging-log4j2 git commit: Convert BlockingQueueFactory into a plugin element

Posted by Gary Gregory <ga...@gmail.com>.
Locally, I get:

Failed tests:
  RoutingAppenderWithPurgingTest.routingTest:91 Incorrect number of
appenders with IdlePurgePolicy. expected:<3> but was:<1>

Gary

On Mon, Sep 5, 2016 at 12:54 PM, Ralph Goers <ra...@dslextreme.com>
wrote:

> For the record, I am voting -1 on this commit.  It breaks the build
> because the DisruptorBlockingQueueFactory has a dependency that requires
> Java 8. The 2.7 release is blocked until this is corrected.
>
> Ralph
>
> > On Sep 4, 2016, at 11:38 AM, mattsicker@apache.org wrote:
> >
> > Convert BlockingQueueFactory into a plugin element
> >
> > Related to LOG4J2-1430.
> >
> >
> > Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
> > Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/
> commit/65ec9bce
> > Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/
> 65ec9bce
> > Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/
> 65ec9bce
> >
> > Branch: refs/heads/master
> > Commit: 65ec9bcef74dc30ecab9c2091c6e0638d53490d8
> > Parents: 0848d7a
> > Author: Matt Sicker <bo...@gmail.com>
> > Authored: Fri Jun 17 18:51:08 2016 -0500
> > Committer: Matt Sicker <bo...@gmail.com>
> > Committed: Fri Jun 17 18:51:08 2016 -0500
> >
> > ----------------------------------------------------------------------
> > .../log4j/core/appender/AsyncAppender.java      | 24 +++++++++---
> > .../core/async/ArrayBlockingQueueFactory.java   | 10 +++++
> > .../log4j/core/async/BlockingQueueFactory.java  | 13 ++++++-
> > .../async/DisruptorBlockingQueueFactory.java    | 11 +++++-
> > .../core/async/LinkedTransferQueueFactory.java  | 10 +++++
> > .../log4j/core/appender/AsyncAppenderTest.java  | 16 ++++----
> > .../BlockingQueueFactory-ArrayBlockingQueue.xml | 40
> ++++++++++++++++++++
> > ...ckingQueueFactory-DisruptorBlockingQueue.xml | 40
> ++++++++++++++++++++
> > ...BlockingQueueFactory-LinkedTransferQueue.xml | 40
> ++++++++++++++++++++
> > 9 files changed, 189 insertions(+), 15 deletions(-)
> > ----------------------------------------------------------------------
> >
> >
> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/
> 65ec9bce/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 3c9c37c..dee5e50 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
> > @@ -26,8 +26,11 @@ 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;
> > +import org.apache.logging.log4j.core.async.ArrayBlockingQueueFactory;
> > import org.apache.logging.log4j.core.async.AsyncQueueFullPolicy;
> > import org.apache.logging.log4j.core.async.AsyncQueueFullPolicyFactory;
> > +import org.apache.logging.log4j.core.async.BlockingQueueFactory;
> > +import org.apache.logging.log4j.core.async.BlockingQueueFactoryUtil;
> > import org.apache.logging.log4j.core.async.
> DiscardingAsyncQueueFullPolicy;
> > import org.apache.logging.log4j.core.async.EventRoute;
> > import org.apache.logging.log4j.core.config.AppenderControl;
> > @@ -42,7 +45,6 @@ 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.validation.
> constraints.Required;
> > import org.apache.logging.log4j.core.impl.Log4jLogEvent;
> > -import org.apache.logging.log4j.core.async.BlockingQueueFactoryUtil;
> > import org.apache.logging.log4j.core.util.Constants;
> >
> > /**
> > @@ -73,8 +75,8 @@ public final class AsyncAppender extends
> AbstractAppender {
> >
> >     private AsyncAppender(final String name, final Filter filter, final
> AppenderRef[] appenderRefs,
> >                           final String errorRef, final int queueSize,
> final boolean blocking,
> > -                          final boolean ignoreExceptions,
> > -                          final long shutdownTimeout, final
> Configuration config, final boolean includeLocation) {
> > +                          final boolean ignoreExceptions, final long
> shutdownTimeout, final Configuration config,
> > +                          final boolean includeLocation, final
> BlockingQueueFactory<LogEvent> blockingQueueFactory) {
> >         super(name, filter, null, ignoreExceptions);
> >         this.queue = BlockingQueueFactoryUtil.<LogEvent>
> getBlockingQueueFactory().create(queueSize);
> >         this.queueSize = queueSize;
> > @@ -217,7 +219,9 @@ public final class AsyncAppender extends
> AbstractAppender {
> >     }
> >
> >     /**
> > -     * Create an AsyncAppender.
> > +     * Create an AsyncAppender. This method is retained for backwards
> compatibility. New code should use the
> > +     * {@link Builder} instead. This factory will use {@link
> ArrayBlockingQueueFactory} by default as was the behavior
> > +     * pre-2.7.
> >      *
> >      * @param appenderRefs     The Appenders to reference.
> >      * @param errorRef         An optional Appender to write to if the
> queue is full or other errors occur.
> > @@ -247,7 +251,7 @@ public final class AsyncAppender extends
> AbstractAppender {
> >         }
> >
> >         return new AsyncAppender(name, filter, appenderRefs, errorRef,
> size, blocking, ignoreExceptions,
> > -            shutdownTimeout, config, includeLocation);
> > +            shutdownTimeout, config, includeLocation, new
> ArrayBlockingQueueFactory<LogEvent>());
> >     }
> >
> >     @PluginBuilderFactory
> > @@ -290,6 +294,9 @@ public final class AsyncAppender extends
> AbstractAppender {
> >         @PluginBuilderAttribute
> >         private boolean ignoreExceptions = true;
> >
> > +        @PluginElement(BlockingQueueFactory.ELEMENT_TYPE)
> > +        private BlockingQueueFactory<LogEvent> blockingQueueFactory =
> new ArrayBlockingQueueFactory<>();
> > +
> >         public Builder setAppenderRefs(AppenderRef[] appenderRefs) {
> >             this.appenderRefs = appenderRefs;
> >             return this;
> > @@ -340,10 +347,15 @@ public final class AsyncAppender extends
> AbstractAppender {
> >             return this;
> >         }
> >
> > +        public Builder setBlockingQueueFactory(final
> BlockingQueueFactory<LogEvent> blockingQueueFactory) {
> > +            this.blockingQueueFactory = blockingQueueFactory;
> > +            return this;
> > +        }
> > +
> >         @Override
> >         public AsyncAppender build() {
> >             return new AsyncAppender(name, filter, appenderRefs,
> errorRef, bufferSize, blocking, ignoreExceptions,
> > -                shutdownTimeout, configuration, includeLocation);
> > +                shutdownTimeout, configuration, includeLocation,
> blockingQueueFactory);
> >         }
> >     }
> >
> >
> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/
> 65ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/core/async/
> ArrayBlockingQueueFactory.java
> > ----------------------------------------------------------------------
> > diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/
> async/ArrayBlockingQueueFactory.java b/log4j-core/src/main/java/
> org/apache/logging/log4j/core/async/ArrayBlockingQueueFactory.java
> > index e9c99b8..dcad78a 100644
> > --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/
> ArrayBlockingQueueFactory.java
> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/
> ArrayBlockingQueueFactory.java
> > @@ -3,14 +3,24 @@ package org.apache.logging.log4j.core.async;
> > import java.util.concurrent.ArrayBlockingQueue;
> > import java.util.concurrent.BlockingQueue;
> >
> > +import org.apache.logging.log4j.core.config.Node;
> > +import org.apache.logging.log4j.core.config.plugins.Plugin;
> > +import org.apache.logging.log4j.core.config.plugins.PluginFactory;
> > +
> > /**
> >  * Factory for creating instances of {@link ArrayBlockingQueue}.
> >  *
> >  * @since 2.7
> >  */
> > +@Plugin(name = "ArrayBlockingQueue", category = Node.CATEGORY,
> elementType = BlockingQueueFactory.ELEMENT_TYPE)
> > public class ArrayBlockingQueueFactory<E> implements
> BlockingQueueFactory<E> {
> >     @Override
> >     public BlockingQueue<E> create(int capacity) {
> >         return new ArrayBlockingQueue<>(capacity);
> >     }
> > +
> > +    @PluginFactory
> > +    public static <E> ArrayBlockingQueueFactory<E> createFactory() {
> > +        return new ArrayBlockingQueueFactory<>();
> > +    }
> > }
> >
> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/
> 65ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/core/async/
> BlockingQueueFactory.java
> > ----------------------------------------------------------------------
> > diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/
> async/BlockingQueueFactory.java b/log4j-core/src/main/java/
> org/apache/logging/log4j/core/async/BlockingQueueFactory.java
> > index ccd1625..5763d1e 100644
> > --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/
> async/BlockingQueueFactory.java
> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/
> async/BlockingQueueFactory.java
> > @@ -9,7 +9,18 @@ import java.util.concurrent.BlockingQueue;
> >  */
> > public interface BlockingQueueFactory<E> {
> >
> > -    String PROPERTY = "log4j.BlockingQueueFactory";
> > +    /**
> > +     * The {@link org.apache.logging.log4j.core.config.plugins.Plugin#elementType()
> element type} to use for plugins
> > +     * implementing this interface.
> > +     */
> > +    String ELEMENT_TYPE = "BlockingQueueFactory";
> >
> > +    /**
> > +     * Creates a new BlockingQueue with the specified maximum capacity.
> Note that not all implementations of
> > +     * BlockingQueue support a bounded capacity in which case the value
> is ignored.
> > +     *
> > +     * @param capacity maximum size of the queue if supported
> > +     * @return a new BlockingQueue
> > +     */
> >     BlockingQueue<E> create(int capacity);
> > }
> >
> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/
> 65ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/core/async/
> DisruptorBlockingQueueFactory.java
> > ----------------------------------------------------------------------
> > diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/
> async/DisruptorBlockingQueueFactory.java b/log4j-core/src/main/java/
> org/apache/logging/log4j/core/async/DisruptorBlockingQueueFactory.java
> > index 8fb3707..add375d 100644
> > --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/
> DisruptorBlockingQueueFactory.java
> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/
> DisruptorBlockingQueueFactory.java
> > @@ -3,15 +3,24 @@ package org.apache.logging.log4j.core.async;
> > import java.util.concurrent.BlockingQueue;
> >
> > import com.conversantmedia.util.concurrent.DisruptorBlockingQueue;
> > +import org.apache.logging.log4j.core.config.Node;
> > +import org.apache.logging.log4j.core.config.plugins.Plugin;
> > +import org.apache.logging.log4j.core.config.plugins.PluginFactory;
> >
> > /**
> >  * Factory for creating instances of {@link DisruptorBlockingQueue}.
> >  *
> >  * @since 2.7
> >  */
> > +@Plugin(name = "DisruptorBlockingQueue", category = Node.CATEGORY,
> elementType = BlockingQueueFactory.ELEMENT_TYPE)
> > public class DisruptorBlockingQueueFactory<E> implements
> BlockingQueueFactory<E> {
> >     @Override
> >     public BlockingQueue<E> create(int capacity) {
> > -        return new DisruptorBlockingQueue<E>(capacity);
> > +        return new DisruptorBlockingQueue<>(capacity);
> > +    }
> > +
> > +    @PluginFactory
> > +    public static <E> DisruptorBlockingQueueFactory<E> createFactory()
> {
> > +        return new DisruptorBlockingQueueFactory<>();
> >     }
> > }
> >
> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/
> 65ec9bce/log4j-core/src/main/java/org/apache/logging/log4j/core/async/
> LinkedTransferQueueFactory.java
> > ----------------------------------------------------------------------
> > diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/
> async/LinkedTransferQueueFactory.java b/log4j-core/src/main/java/
> org/apache/logging/log4j/core/async/LinkedTransferQueueFactory.java
> > index 862fab3..6ab24e7 100644
> > --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/
> LinkedTransferQueueFactory.java
> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/
> LinkedTransferQueueFactory.java
> > @@ -20,14 +20,24 @@ package org.apache.logging.log4j.core.async;
> > import java.util.concurrent.BlockingQueue;
> > import java.util.concurrent.LinkedTransferQueue;
> >
> > +import org.apache.logging.log4j.core.config.Node;
> > +import org.apache.logging.log4j.core.config.plugins.Plugin;
> > +import org.apache.logging.log4j.core.config.plugins.PluginFactory;
> > +
> > /**
> >  * Factory for creating instances of {@link LinkedTransferQueue}.
> >  *
> >  * @since 2.7
> >  */
> > +@Plugin(name = "LinkedTransferQueue", category = Node.CATEGORY,
> elementType = BlockingQueueFactory.ELEMENT_TYPE)
> > public class LinkedTransferQueueFactory<E> implements
> BlockingQueueFactory<E> {
> >     @Override
> >     public BlockingQueue<E> create(int capacity) {
> >         return new LinkedTransferQueue<>();
> >     }
> > +
> > +    @PluginFactory
> > +    public static <E> LinkedTransferQueueFactory<E> createFactory() {
> > +        return new LinkedTransferQueueFactory<>();
> > +    }
> > }
> >
> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/
> 65ec9bce/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/
> AsyncAppenderTest.java
> > ----------------------------------------------------------------------
> > diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/
> appender/AsyncAppenderTest.java b/log4j-core/src/test/java/
> org/apache/logging/log4j/core/appender/AsyncAppenderTest.java
> > index 3066f38..076fdd0 100644
> > --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/
> appender/AsyncAppenderTest.java
> > +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/
> appender/AsyncAppenderTest.java
> > @@ -41,19 +41,21 @@ import static org.junit.Assert.*;
> >  */
> > @RunWith(Parameterized.class)
> > public class AsyncAppenderTest {
> > -    private static final String CONFIG = "log4j-asynch.xml";
> >
> >     @Parameterized.Parameters
> >     public static Object[] data() {
> > -        return new Class<?>[]{
> > -            ArrayBlockingQueueFactory.class,
> > -            DisruptorBlockingQueueFactory.class,
> > -            LinkedTransferQueueFactory.class
> > +        return new String[]{
> > +            // default async config uses array blocking queue
> > +            "log4j-asynch.xml",
> > +            // override default blocking queue implementations
> > +            "BlockingQueueFactory-ArrayBlockingQueue.xml",
> > +            "BlockingQueueFactory-DisruptorBlockingQueue.xml",
> > +            "BlockingQueueFactory-LinkedTransferQueue.xml"
> >         };
> >     }
> >
> > -    public AsyncAppenderTest(final Class<? extends
> BlockingQueueFactory> factory) {
> > -        context = new LoggerContextRule(CONFIG).withSystemProperty(BlockingQueueFactory.PROPERTY,
> factory.getName());
> > +    public AsyncAppenderTest(final String configFileName) {
> > +        context = new LoggerContextRule(configFileName);
> >     }
> >
> >     @Rule
> >
> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/
> 65ec9bce/log4j-core/src/test/resources/BlockingQueueFactory-
> ArrayBlockingQueue.xml
> > ----------------------------------------------------------------------
> > diff --git a/log4j-core/src/test/resources/BlockingQueueFactory-ArrayBlockingQueue.xml
> b/log4j-core/src/test/resources/BlockingQueueFactory-
> ArrayBlockingQueue.xml
> > new file mode 100644
> > index 0000000..e8bbfa6
> > --- /dev/null
> > +++ b/log4j-core/src/test/resources/BlockingQueueFactory-
> ArrayBlockingQueue.xml
> > @@ -0,0 +1,40 @@
> > +<?xml version="1.0" encoding="UTF-8"?>
> > +<!--
> > + Licensed to the Apache Software Foundation (ASF) under one or more
> > + contributor license agreements.  See the NOTICE file distributed with
> > + this work for additional information regarding copyright ownership.
> > + The ASF licenses this file to You under the Apache License, Version 2.0
> > + (the "License"); you may not use this file except in compliance with
> > + the License.  You may obtain a copy of the License at
> > +
> > +      http://www.apache.org/licenses/LICENSE-2.0
> > +
> > + Unless required by applicable law or agreed to in writing, software
> > + distributed under the License is distributed on an "AS IS" BASIS,
> > + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> implied.
> > + See the License for the specific language governing permissions and
> > + limitations under the License.
> > +
> > +-->
> > +<Configuration status="OFF" name="ArrayBlockingQueueFactory">
> > +
> > +  <Appenders>
> > +    <Console name="STDOUT">
> > +      <PatternLayout pattern="%m%n"/>
> > +    </Console>
> > +    <List name="List">
> > +      <PatternLayout pattern="%C %M %m"/>
> > +    </List>
> > +    <Async name="Async" includeLocation="true" error-ref="STDOUT">
> > +      <AppenderRef ref="List"/>
> > +      <ArrayBlockingQueue/>
> > +    </Async>
> > +  </Appenders>
> > +
> > +  <Loggers>
> > +    <Root level="debug">
> > +      <AppenderRef ref="Async"/>
> > +    </Root>
> > +  </Loggers>
> > +
> > +</Configuration>
> > \ No newline at end of file
> >
> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/
> 65ec9bce/log4j-core/src/test/resources/BlockingQueueFactory-
> DisruptorBlockingQueue.xml
> > ----------------------------------------------------------------------
> > diff --git a/log4j-core/src/test/resources/BlockingQueueFactory-DisruptorBlockingQueue.xml
> b/log4j-core/src/test/resources/BlockingQueueFactory-
> DisruptorBlockingQueue.xml
> > new file mode 100644
> > index 0000000..268cca7
> > --- /dev/null
> > +++ b/log4j-core/src/test/resources/BlockingQueueFactory-
> DisruptorBlockingQueue.xml
> > @@ -0,0 +1,40 @@
> > +<?xml version="1.0" encoding="UTF-8"?>
> > +<!--
> > + Licensed to the Apache Software Foundation (ASF) under one or more
> > + contributor license agreements.  See the NOTICE file distributed with
> > + this work for additional information regarding copyright ownership.
> > + The ASF licenses this file to You under the Apache License, Version 2.0
> > + (the "License"); you may not use this file except in compliance with
> > + the License.  You may obtain a copy of the License at
> > +
> > +      http://www.apache.org/licenses/LICENSE-2.0
> > +
> > + Unless required by applicable law or agreed to in writing, software
> > + distributed under the License is distributed on an "AS IS" BASIS,
> > + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> implied.
> > + See the License for the specific language governing permissions and
> > + limitations under the License.
> > +
> > +-->
> > +<Configuration status="OFF" name="DisruptorBlockingQueueFactory">
> > +
> > +  <Appenders>
> > +    <Console name="STDOUT">
> > +      <PatternLayout pattern="%m%n"/>
> > +    </Console>
> > +    <List name="List">
> > +      <PatternLayout pattern="%C %M %m"/>
> > +    </List>
> > +    <Async name="Async" includeLocation="true" error-ref="STDOUT">
> > +      <AppenderRef ref="List"/>
> > +      <DisruptorBlockingQueue/>
> > +    </Async>
> > +  </Appenders>
> > +
> > +  <Loggers>
> > +    <Root level="debug">
> > +      <AppenderRef ref="Async"/>
> > +    </Root>
> > +  </Loggers>
> > +
> > +</Configuration>
> > \ No newline at end of file
> >
> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/
> 65ec9bce/log4j-core/src/test/resources/BlockingQueueFactory-
> LinkedTransferQueue.xml
> > ----------------------------------------------------------------------
> > diff --git a/log4j-core/src/test/resources/BlockingQueueFactory-LinkedTransferQueue.xml
> b/log4j-core/src/test/resources/BlockingQueueFactory-
> LinkedTransferQueue.xml
> > new file mode 100644
> > index 0000000..13063d3
> > --- /dev/null
> > +++ b/log4j-core/src/test/resources/BlockingQueueFactory-
> LinkedTransferQueue.xml
> > @@ -0,0 +1,40 @@
> > +<?xml version="1.0" encoding="UTF-8"?>
> > +<!--
> > + Licensed to the Apache Software Foundation (ASF) under one or more
> > + contributor license agreements.  See the NOTICE file distributed with
> > + this work for additional information regarding copyright ownership.
> > + The ASF licenses this file to You under the Apache License, Version 2.0
> > + (the "License"); you may not use this file except in compliance with
> > + the License.  You may obtain a copy of the License at
> > +
> > +      http://www.apache.org/licenses/LICENSE-2.0
> > +
> > + Unless required by applicable law or agreed to in writing, software
> > + distributed under the License is distributed on an "AS IS" BASIS,
> > + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> implied.
> > + See the License for the specific language governing permissions and
> > + limitations under the License.
> > +
> > +-->
> > +<Configuration status="OFF" name="LinkedTransferQueueFactory">
> > +
> > +  <Appenders>
> > +    <Console name="STDOUT">
> > +      <PatternLayout pattern="%m%n"/>
> > +    </Console>
> > +    <List name="List">
> > +      <PatternLayout pattern="%C %M %m"/>
> > +    </List>
> > +    <Async name="Async" includeLocation="true" error-ref="STDOUT">
> > +      <AppenderRef ref="List"/>
> > +      <LinkedTransferQueue/>
> > +    </Async>
> > +  </Appenders>
> > +
> > +  <Loggers>
> > +    <Root level="debug">
> > +      <AppenderRef ref="Async"/>
> > +    </Root>
> > +  </Loggers>
> > +
> > +</Configuration>
> > \ No newline at end of file
> >
> >
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: log4j-dev-unsubscribe@logging.apache.org
> For additional commands, e-mail: log4j-dev-help@logging.apache.org
>
>


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