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<>();
    }
}

@@ -241,16 +241,85 @@
 Plugin;%0A
+import org.apache.logging.log4j.core.config.plugins.PluginAttribute;%0A
 import o
@@ -659,16 +659,143 @@
 ry%3CE%3E %7B%0A
+%0A    private final boolean fair;%0A%0A    private ArrayBlockingQueueFactory(final boolean fair) %7B%0A        this.fair = fair;%0A    %7D%0A%0A
     @Ove
@@ -899,16 +899,22 @@
 capacity
+, fair
 );%0A    %7D
@@ -999,16 +999,59 @@
 Factory(
+@PluginAttribute(%22fair%22) final boolean fair
 ) %7B%0A    
@@ -1093,16 +1093,20 @@
 ctory%3C%3E(
+fair
 );%0A    %7D

Make fairness configurable in ArrayBlockingQueueFactory