diff --git a/log4j-async-logger/pom.xml b/log4j-async-logger/pom.xml
index 5d37d3d80f0..aba22bd83d9 100644
--- a/log4j-async-logger/pom.xml
+++ b/log4j-async-logger/pom.xml
@@ -25,7 +25,7 @@
log4j-async-logger
- Log4j Async Logger
+ Apache Log4j Async LoggerAlternative implementation of logger that uses LMAX Disruptor.
@@ -65,4 +65,22 @@
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+
+
+ org.apache.logging.log4j
+ log4j-plugin-processor
+ ${project.version}
+
+
+
+
+
+
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AbstractAsyncExceptionHandler.java b/log4j-async-logger/src/main/java/org/apache/logging/log4j/async/logger/AbstractAsyncExceptionHandler.java
similarity index 98%
rename from log4j-core/src/main/java/org/apache/logging/log4j/core/async/AbstractAsyncExceptionHandler.java
rename to log4j-async-logger/src/main/java/org/apache/logging/log4j/async/logger/AbstractAsyncExceptionHandler.java
index dd84b23c528..51f1c7bc962 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AbstractAsyncExceptionHandler.java
+++ b/log4j-async-logger/src/main/java/org/apache/logging/log4j/async/logger/AbstractAsyncExceptionHandler.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.logging.log4j.core.async;
+package org.apache.logging.log4j.async.logger;
import com.lmax.disruptor.ExceptionHandler;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLogger.java b/log4j-async-logger/src/main/java/org/apache/logging/log4j/async/logger/AsyncLogger.java
similarity index 98%
rename from log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLogger.java
rename to log4j-async-logger/src/main/java/org/apache/logging/log4j/async/logger/AsyncLogger.java
index 5515fcbb348..ef58ea767ce 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLogger.java
+++ b/log4j-async-logger/src/main/java/org/apache/logging/log4j/async/logger/AsyncLogger.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.logging.log4j.core.async;
+package org.apache.logging.log4j.async.logger;
import java.util.List;
import org.apache.logging.log4j.Level;
@@ -24,6 +24,8 @@
import org.apache.logging.log4j.core.Logger;
import org.apache.logging.log4j.core.LoggerContext;
import org.apache.logging.log4j.core.ReusableLogEvent;
+import org.apache.logging.log4j.core.async.AsyncQueueFullMessageUtil;
+import org.apache.logging.log4j.core.async.EventRoute;
import org.apache.logging.log4j.core.config.Configuration;
import org.apache.logging.log4j.core.config.LoggerConfig;
import org.apache.logging.log4j.core.config.Property;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLoggerConfig.java b/log4j-async-logger/src/main/java/org/apache/logging/log4j/async/logger/AsyncLoggerConfig.java
similarity index 98%
rename from log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLoggerConfig.java
rename to log4j-async-logger/src/main/java/org/apache/logging/log4j/async/logger/AsyncLoggerConfig.java
index f048b8506f5..da36cf561aa 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLoggerConfig.java
+++ b/log4j-async-logger/src/main/java/org/apache/logging/log4j/async/logger/AsyncLoggerConfig.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.logging.log4j.core.async;
+package org.apache.logging.log4j.async.logger;
import java.util.List;
import java.util.concurrent.TimeUnit;
@@ -23,6 +23,8 @@
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.core.Filter;
import org.apache.logging.log4j.core.LogEvent;
+import org.apache.logging.log4j.core.async.AsyncQueueFullMessageUtil;
+import org.apache.logging.log4j.core.async.EventRoute;
import org.apache.logging.log4j.core.config.AppenderRef;
import org.apache.logging.log4j.core.config.Configuration;
import org.apache.logging.log4j.core.config.LoggerConfig;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLoggerConfigDefaultExceptionHandler.java b/log4j-async-logger/src/main/java/org/apache/logging/log4j/async/logger/AsyncLoggerConfigDefaultExceptionHandler.java
similarity index 95%
rename from log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLoggerConfigDefaultExceptionHandler.java
rename to log4j-async-logger/src/main/java/org/apache/logging/log4j/async/logger/AsyncLoggerConfigDefaultExceptionHandler.java
index 1bf13f7dd3d..3502bb38d0e 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLoggerConfigDefaultExceptionHandler.java
+++ b/log4j-async-logger/src/main/java/org/apache/logging/log4j/async/logger/AsyncLoggerConfigDefaultExceptionHandler.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.logging.log4j.core.async;
+package org.apache.logging.log4j.async.logger;
/**
* Default disruptor exception handler for errors that occur in the AsyncLogger background thread.
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLoggerConfigDelegate.java b/log4j-async-logger/src/main/java/org/apache/logging/log4j/async/logger/AsyncLoggerConfigDelegate.java
similarity index 95%
rename from log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLoggerConfigDelegate.java
rename to log4j-async-logger/src/main/java/org/apache/logging/log4j/async/logger/AsyncLoggerConfigDelegate.java
index e2145a93f49..e3997404c42 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLoggerConfigDelegate.java
+++ b/log4j-async-logger/src/main/java/org/apache/logging/log4j/async/logger/AsyncLoggerConfigDelegate.java
@@ -14,10 +14,11 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.logging.log4j.core.async;
+package org.apache.logging.log4j.async.logger;
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.core.LogEvent;
+import org.apache.logging.log4j.core.async.EventRoute;
import org.apache.logging.log4j.core.impl.LogEventFactory;
/**
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLoggerConfigDisruptor.java b/log4j-async-logger/src/main/java/org/apache/logging/log4j/async/logger/AsyncLoggerConfigDisruptor.java
similarity index 98%
rename from log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLoggerConfigDisruptor.java
rename to log4j-async-logger/src/main/java/org/apache/logging/log4j/async/logger/AsyncLoggerConfigDisruptor.java
index 3f27efc83fb..b132e6ae847 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLoggerConfigDisruptor.java
+++ b/log4j-async-logger/src/main/java/org/apache/logging/log4j/async/logger/AsyncLoggerConfigDisruptor.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.logging.log4j.core.async;
+package org.apache.logging.log4j.async.logger;
import com.lmax.disruptor.EventFactory;
import com.lmax.disruptor.EventHandler;
@@ -34,6 +34,11 @@
import org.apache.logging.log4j.core.AbstractLifeCycle;
import org.apache.logging.log4j.core.LogEvent;
import org.apache.logging.log4j.core.ReusableLogEvent;
+import org.apache.logging.log4j.core.async.AsyncQueueFullPolicy;
+import org.apache.logging.log4j.core.async.AsyncQueueFullPolicyFactory;
+import org.apache.logging.log4j.core.async.DiscardingAsyncQueueFullPolicy;
+import org.apache.logging.log4j.core.async.EventRoute;
+import org.apache.logging.log4j.core.async.InternalAsyncUtil;
import org.apache.logging.log4j.core.impl.Log4jLogEvent;
import org.apache.logging.log4j.core.impl.Log4jPropertyKey;
import org.apache.logging.log4j.core.impl.LogEventFactory;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLoggerContext.java b/log4j-async-logger/src/main/java/org/apache/logging/log4j/async/logger/AsyncLoggerContext.java
similarity index 99%
rename from log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLoggerContext.java
rename to log4j-async-logger/src/main/java/org/apache/logging/log4j/async/logger/AsyncLoggerContext.java
index 0484eb6e91f..8e1ce4290e4 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLoggerContext.java
+++ b/log4j-async-logger/src/main/java/org/apache/logging/log4j/async/logger/AsyncLoggerContext.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.logging.log4j.core.async;
+package org.apache.logging.log4j.async.logger;
import java.net.URI;
import java.util.concurrent.TimeUnit;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLoggerContextSelector.java b/log4j-async-logger/src/main/java/org/apache/logging/log4j/async/logger/AsyncLoggerContextSelector.java
similarity index 97%
rename from log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLoggerContextSelector.java
rename to log4j-async-logger/src/main/java/org/apache/logging/log4j/async/logger/AsyncLoggerContextSelector.java
index fe43e06f9d0..31e5b9c4031 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLoggerContextSelector.java
+++ b/log4j-async-logger/src/main/java/org/apache/logging/log4j/async/logger/AsyncLoggerContextSelector.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.logging.log4j.core.async;
+package org.apache.logging.log4j.async.logger;
import java.net.URI;
import org.apache.logging.log4j.core.LoggerContext;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLoggerDefaultExceptionHandler.java b/log4j-async-logger/src/main/java/org/apache/logging/log4j/async/logger/AsyncLoggerDefaultExceptionHandler.java
similarity index 95%
rename from log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLoggerDefaultExceptionHandler.java
rename to log4j-async-logger/src/main/java/org/apache/logging/log4j/async/logger/AsyncLoggerDefaultExceptionHandler.java
index 058d306c223..f8e866183fe 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLoggerDefaultExceptionHandler.java
+++ b/log4j-async-logger/src/main/java/org/apache/logging/log4j/async/logger/AsyncLoggerDefaultExceptionHandler.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.logging.log4j.core.async;
+package org.apache.logging.log4j.async.logger;
/**
* Default disruptor exception handler for errors that occur in the AsyncLogger background thread.
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLoggerDisruptor.java b/log4j-async-logger/src/main/java/org/apache/logging/log4j/async/logger/AsyncLoggerDisruptor.java
similarity index 97%
rename from log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLoggerDisruptor.java
rename to log4j-async-logger/src/main/java/org/apache/logging/log4j/async/logger/AsyncLoggerDisruptor.java
index b3281e42168..b2280e62b7e 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLoggerDisruptor.java
+++ b/log4j-async-logger/src/main/java/org/apache/logging/log4j/async/logger/AsyncLoggerDisruptor.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.logging.log4j.core.async;
+package org.apache.logging.log4j.async.logger;
import com.lmax.disruptor.ExceptionHandler;
import com.lmax.disruptor.RingBuffer;
@@ -30,6 +30,10 @@
import java.util.function.Supplier;
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.core.AbstractLifeCycle;
+import org.apache.logging.log4j.core.async.AsyncQueueFullPolicy;
+import org.apache.logging.log4j.core.async.AsyncQueueFullPolicyFactory;
+import org.apache.logging.log4j.core.async.DiscardingAsyncQueueFullPolicy;
+import org.apache.logging.log4j.core.async.EventRoute;
import org.apache.logging.log4j.core.impl.Log4jPropertyKey;
import org.apache.logging.log4j.core.util.Log4jThread;
import org.apache.logging.log4j.core.util.Log4jThreadFactory;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncWaitStrategyFactory.java b/log4j-async-logger/src/main/java/org/apache/logging/log4j/async/logger/AsyncWaitStrategyFactory.java
similarity index 96%
rename from log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncWaitStrategyFactory.java
rename to log4j-async-logger/src/main/java/org/apache/logging/log4j/async/logger/AsyncWaitStrategyFactory.java
index 7b5f1c0b1a6..491b37eebf7 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncWaitStrategyFactory.java
+++ b/log4j-async-logger/src/main/java/org/apache/logging/log4j/async/logger/AsyncWaitStrategyFactory.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.logging.log4j.core.async;
+package org.apache.logging.log4j.async.logger;
import com.lmax.disruptor.WaitStrategy;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/BasicAsyncLoggerContextSelector.java b/log4j-async-logger/src/main/java/org/apache/logging/log4j/async/logger/BasicAsyncLoggerContextSelector.java
similarity index 97%
rename from log4j-core/src/main/java/org/apache/logging/log4j/core/async/BasicAsyncLoggerContextSelector.java
rename to log4j-async-logger/src/main/java/org/apache/logging/log4j/async/logger/BasicAsyncLoggerContextSelector.java
index 7292941cd54..e8d458f4662 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/BasicAsyncLoggerContextSelector.java
+++ b/log4j-async-logger/src/main/java/org/apache/logging/log4j/async/logger/BasicAsyncLoggerContextSelector.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.logging.log4j.core.async;
+package org.apache.logging.log4j.async.logger;
import java.net.URI;
import org.apache.logging.log4j.core.LoggerContext;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/DefaultAsyncWaitStrategyFactory.java b/log4j-async-logger/src/main/java/org/apache/logging/log4j/async/logger/DefaultAsyncWaitStrategyFactory.java
similarity index 98%
rename from log4j-core/src/main/java/org/apache/logging/log4j/core/async/DefaultAsyncWaitStrategyFactory.java
rename to log4j-async-logger/src/main/java/org/apache/logging/log4j/async/logger/DefaultAsyncWaitStrategyFactory.java
index 1014846a660..d0084a17ee3 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/DefaultAsyncWaitStrategyFactory.java
+++ b/log4j-async-logger/src/main/java/org/apache/logging/log4j/async/logger/DefaultAsyncWaitStrategyFactory.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.logging.log4j.core.async;
+package org.apache.logging.log4j.async.logger;
import com.lmax.disruptor.BlockingWaitStrategy;
import com.lmax.disruptor.BusySpinWaitStrategy;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/DisruptorConfiguration.java b/log4j-async-logger/src/main/java/org/apache/logging/log4j/async/logger/DisruptorConfiguration.java
similarity index 99%
rename from log4j-core/src/main/java/org/apache/logging/log4j/core/async/DisruptorConfiguration.java
rename to log4j-async-logger/src/main/java/org/apache/logging/log4j/async/logger/DisruptorConfiguration.java
index 035aa4c445d..01eccd43e64 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/DisruptorConfiguration.java
+++ b/log4j-async-logger/src/main/java/org/apache/logging/log4j/async/logger/DisruptorConfiguration.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.logging.log4j.core.async;
+package org.apache.logging.log4j.async.logger;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/DisruptorUtil.java b/log4j-async-logger/src/main/java/org/apache/logging/log4j/async/logger/DisruptorUtil.java
similarity index 99%
rename from log4j-core/src/main/java/org/apache/logging/log4j/core/async/DisruptorUtil.java
rename to log4j-async-logger/src/main/java/org/apache/logging/log4j/async/logger/DisruptorUtil.java
index 7d9444e0ef1..9716276ed65 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/DisruptorUtil.java
+++ b/log4j-async-logger/src/main/java/org/apache/logging/log4j/async/logger/DisruptorUtil.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.logging.log4j.core.async;
+package org.apache.logging.log4j.async.logger;
import static org.apache.logging.log4j.core.impl.Log4jPropertyKey.ASYNC_CONFIG_EXCEPTION_HANDLER_CLASS_NAME;
import static org.apache.logging.log4j.core.impl.Log4jPropertyKey.ASYNC_LOGGER_EXCEPTION_HANDLER_CLASS_NAME;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/RingBufferLogEvent.java b/log4j-async-logger/src/main/java/org/apache/logging/log4j/async/logger/RingBufferLogEvent.java
similarity index 99%
rename from log4j-core/src/main/java/org/apache/logging/log4j/core/async/RingBufferLogEvent.java
rename to log4j-async-logger/src/main/java/org/apache/logging/log4j/async/logger/RingBufferLogEvent.java
index 5d97613bc2f..4c4b6da4c2d 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/RingBufferLogEvent.java
+++ b/log4j-async-logger/src/main/java/org/apache/logging/log4j/async/logger/RingBufferLogEvent.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.logging.log4j.core.async;
+package org.apache.logging.log4j.async.logger;
import com.lmax.disruptor.EventFactory;
import java.util.Arrays;
@@ -23,6 +23,7 @@
import org.apache.logging.log4j.ThreadContext.ContextStack;
import org.apache.logging.log4j.core.LogEvent;
import org.apache.logging.log4j.core.ReusableLogEvent;
+import org.apache.logging.log4j.core.async.InternalAsyncUtil;
import org.apache.logging.log4j.core.impl.ContextDataFactory;
import org.apache.logging.log4j.core.impl.Log4jLogEvent;
import org.apache.logging.log4j.core.impl.MementoMessage;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/RingBufferLogEventHandler.java b/log4j-async-logger/src/main/java/org/apache/logging/log4j/async/logger/RingBufferLogEventHandler.java
similarity index 98%
rename from log4j-core/src/main/java/org/apache/logging/log4j/core/async/RingBufferLogEventHandler.java
rename to log4j-async-logger/src/main/java/org/apache/logging/log4j/async/logger/RingBufferLogEventHandler.java
index f141846591f..f19be654937 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/RingBufferLogEventHandler.java
+++ b/log4j-async-logger/src/main/java/org/apache/logging/log4j/async/logger/RingBufferLogEventHandler.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.logging.log4j.core.async;
+package org.apache.logging.log4j.async.logger;
import com.lmax.disruptor.EventHandler;
import com.lmax.disruptor.Sequence;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/RingBufferLogEventTranslator.java b/log4j-async-logger/src/main/java/org/apache/logging/log4j/async/logger/RingBufferLogEventTranslator.java
similarity index 99%
rename from log4j-core/src/main/java/org/apache/logging/log4j/core/async/RingBufferLogEventTranslator.java
rename to log4j-async-logger/src/main/java/org/apache/logging/log4j/async/logger/RingBufferLogEventTranslator.java
index 15b2b652bcb..96948902be0 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/RingBufferLogEventTranslator.java
+++ b/log4j-async-logger/src/main/java/org/apache/logging/log4j/async/logger/RingBufferLogEventTranslator.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.logging.log4j.core.async;
+package org.apache.logging.log4j.async.logger;
import com.lmax.disruptor.EventTranslator;
import org.apache.logging.log4j.Level;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/TimeoutBlockingWaitStrategy.java b/log4j-async-logger/src/main/java/org/apache/logging/log4j/async/logger/TimeoutBlockingWaitStrategy.java
similarity index 98%
rename from log4j-core/src/main/java/org/apache/logging/log4j/core/async/TimeoutBlockingWaitStrategy.java
rename to log4j-async-logger/src/main/java/org/apache/logging/log4j/async/logger/TimeoutBlockingWaitStrategy.java
index 77db1635c9e..657da6fec47 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/TimeoutBlockingWaitStrategy.java
+++ b/log4j-async-logger/src/main/java/org/apache/logging/log4j/async/logger/TimeoutBlockingWaitStrategy.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.logging.log4j.core.async;
+package org.apache.logging.log4j.async.logger;
import com.lmax.disruptor.AlertException;
import com.lmax.disruptor.BatchEventProcessor;
diff --git a/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLateConfigTest.java b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLateConfigTest.java
new file mode 100644
index 00000000000..79cf78d7ecd
--- /dev/null
+++ b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLateConfigTest.java
@@ -0,0 +1,52 @@
+/*
+ * 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.
+ */
+package org.apache.logging.log4j.async.logger;
+
+import java.nio.file.Path;
+import java.util.stream.Stream;
+import org.apache.logging.log4j.core.impl.Log4jContextFactory;
+import org.apache.logging.log4j.core.selector.ContextSelector;
+import org.apache.logging.log4j.core.test.LateConfigAbstractTest;
+import org.apache.logging.log4j.plugins.di.ConfigurableInstanceFactory;
+import org.apache.logging.log4j.plugins.di.DI;
+import org.apache.logging.log4j.test.junit.TempLoggingDir;
+import org.apache.logging.log4j.test.junit.UsingStatusListener;
+import org.junit.jupiter.api.Tag;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.MethodSource;
+
+@Tag("functional")
+@UsingStatusListener
+public class AsyncLateConfigTest extends LateConfigAbstractTest {
+
+ @TempLoggingDir
+ private static Path loggingPath;
+
+ static Stream selectors() {
+ final ConfigurableInstanceFactory instanceFactory = DI.createInitializedFactory();
+ return Stream.of(
+ new AsyncLoggerContextSelector(instanceFactory.newChildInstanceFactory()),
+ new BasicAsyncLoggerContextSelector(instanceFactory.newChildInstanceFactory()))
+ .map(Log4jContextFactory::new);
+ }
+
+ @ParameterizedTest(name = "reconfigure {0}")
+ @MethodSource("selectors")
+ void reconfiguration(final Log4jContextFactory factory) throws Exception {
+ testReconfiguration(factory, loggingPath);
+ }
+}
diff --git a/log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggerClassLoadDeadlockTest.java b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLoggerClassLoadDeadlockTest.java
similarity index 98%
rename from log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggerClassLoadDeadlockTest.java
rename to log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLoggerClassLoadDeadlockTest.java
index 4836bbbfbd5..b4ff970790c 100644
--- a/log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggerClassLoadDeadlockTest.java
+++ b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLoggerClassLoadDeadlockTest.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.logging.log4j.core.async;
+package org.apache.logging.log4j.async.logger;
import static org.junit.jupiter.api.Assertions.assertNotNull;
diff --git a/log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggerConfig2Test.java b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLoggerConfig2Test.java
similarity index 98%
rename from log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggerConfig2Test.java
rename to log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLoggerConfig2Test.java
index a36c7569597..ff45f7b9045 100644
--- a/log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggerConfig2Test.java
+++ b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLoggerConfig2Test.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.logging.log4j.core.async;
+package org.apache.logging.log4j.async.logger;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
diff --git a/log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggerConfig3Test.java b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLoggerConfig3Test.java
similarity index 98%
rename from log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggerConfig3Test.java
rename to log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLoggerConfig3Test.java
index f46c75b61fa..8508971b990 100644
--- a/log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggerConfig3Test.java
+++ b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLoggerConfig3Test.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.logging.log4j.core.async;
+package org.apache.logging.log4j.async.logger;
import java.nio.file.Path;
import java.util.HashMap;
diff --git a/log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggerConfig4Test.java b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLoggerConfig4Test.java
similarity index 98%
rename from log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggerConfig4Test.java
rename to log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLoggerConfig4Test.java
index f95ddedbf05..5f203739be1 100644
--- a/log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggerConfig4Test.java
+++ b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLoggerConfig4Test.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.logging.log4j.core.async;
+package org.apache.logging.log4j.async.logger;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.equalTo;
diff --git a/log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggerConfigAutoFlushTest.java b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLoggerConfigAutoFlushTest.java
similarity index 97%
rename from log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggerConfigAutoFlushTest.java
rename to log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLoggerConfigAutoFlushTest.java
index 12b745207a8..d59738208a2 100644
--- a/log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggerConfigAutoFlushTest.java
+++ b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLoggerConfigAutoFlushTest.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.logging.log4j.core.async;
+package org.apache.logging.log4j.async.logger;
import static org.junit.jupiter.api.Assertions.assertTrue;
diff --git a/log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggerConfigErrorOnFormat.java b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLoggerConfigErrorOnFormat.java
similarity index 98%
rename from log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggerConfigErrorOnFormat.java
rename to log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLoggerConfigErrorOnFormat.java
index 1b144842a00..7ed1bfe672f 100644
--- a/log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggerConfigErrorOnFormat.java
+++ b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLoggerConfigErrorOnFormat.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.logging.log4j.core.async;
+package org.apache.logging.log4j.async.logger;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.containsString;
diff --git a/log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggerConfigTest.java b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLoggerConfigTest.java
similarity index 97%
rename from log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggerConfigTest.java
rename to log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLoggerConfigTest.java
index 3dba066194f..6a08fdaf867 100644
--- a/log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggerConfigTest.java
+++ b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLoggerConfigTest.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.logging.log4j.core.async;
+package org.apache.logging.log4j.async.logger;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertFalse;
@@ -30,10 +30,10 @@
import java.nio.file.Path;
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.async.logger.AsyncLoggerConfig.RootLogger;
import org.apache.logging.log4j.core.Appender;
import org.apache.logging.log4j.core.Filter;
import org.apache.logging.log4j.core.LoggerContext;
-import org.apache.logging.log4j.core.async.AsyncLoggerConfig.RootLogger;
import org.apache.logging.log4j.core.config.Configuration;
import org.apache.logging.log4j.core.config.LoggerConfig;
import org.apache.logging.log4j.core.config.NullConfiguration;
diff --git a/log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggerConfigUseAfterShutdownTest.java b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLoggerConfigUseAfterShutdownTest.java
similarity index 97%
rename from log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggerConfigUseAfterShutdownTest.java
rename to log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLoggerConfigUseAfterShutdownTest.java
index 29f20f63e52..79165e5c9bd 100644
--- a/log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggerConfigUseAfterShutdownTest.java
+++ b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLoggerConfigUseAfterShutdownTest.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.logging.log4j.core.async;
+package org.apache.logging.log4j.async.logger;
import java.nio.file.Path;
import org.apache.logging.log4j.Level;
diff --git a/log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggerConfigWithAsyncEnabledTest.java b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLoggerConfigWithAsyncEnabledTest.java
similarity index 98%
rename from log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggerConfigWithAsyncEnabledTest.java
rename to log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLoggerConfigWithAsyncEnabledTest.java
index 3cbcdaf5f34..657cc65bee5 100644
--- a/log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggerConfigWithAsyncEnabledTest.java
+++ b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLoggerConfigWithAsyncEnabledTest.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.logging.log4j.core.async;
+package org.apache.logging.log4j.async.logger;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.equalTo;
diff --git a/log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggerContextSelectorInitialStateTest.java b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLoggerContextSelectorInitialStateTest.java
similarity index 96%
rename from log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggerContextSelectorInitialStateTest.java
rename to log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLoggerContextSelectorInitialStateTest.java
index 8e3af122358..31997d697b4 100644
--- a/log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggerContextSelectorInitialStateTest.java
+++ b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLoggerContextSelectorInitialStateTest.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.logging.log4j.core.async;
+package org.apache.logging.log4j.async.logger;
import static org.junit.jupiter.api.Assertions.assertTrue;
diff --git a/log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggerContextSelectorTest.java b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLoggerContextSelectorTest.java
similarity index 98%
rename from log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggerContextSelectorTest.java
rename to log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLoggerContextSelectorTest.java
index 7c6081e7c0a..b3141cb42b8 100644
--- a/log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggerContextSelectorTest.java
+++ b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLoggerContextSelectorTest.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.logging.log4j.core.async;
+package org.apache.logging.log4j.async.logger;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
diff --git a/log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggerContextTest.java b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLoggerContextTest.java
similarity index 96%
rename from log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggerContextTest.java
rename to log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLoggerContextTest.java
index 54403bbd9e2..a89108b3c0b 100644
--- a/log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggerContextTest.java
+++ b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLoggerContextTest.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.logging.log4j.core.async;
+package org.apache.logging.log4j.async.logger;
import static org.junit.Assert.assertTrue;
diff --git a/log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggerCustomSelectorLocationTest.java b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLoggerCustomSelectorLocationTest.java
similarity index 98%
rename from log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggerCustomSelectorLocationTest.java
rename to log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLoggerCustomSelectorLocationTest.java
index f75fe359776..f84dd735abe 100644
--- a/log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggerCustomSelectorLocationTest.java
+++ b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLoggerCustomSelectorLocationTest.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.logging.log4j.core.async;
+package org.apache.logging.log4j.async.logger;
import static org.hamcrest.CoreMatchers.containsString;
import static org.hamcrest.CoreMatchers.not;
diff --git a/log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggerDefaultLocationTest.java b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLoggerDefaultLocationTest.java
similarity index 97%
rename from log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggerDefaultLocationTest.java
rename to log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLoggerDefaultLocationTest.java
index 3d5ecfd09eb..6c2e5b3bbb3 100644
--- a/log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggerDefaultLocationTest.java
+++ b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLoggerDefaultLocationTest.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.logging.log4j.core.async;
+package org.apache.logging.log4j.async.logger;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
diff --git a/log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggerEventTranslationExceptionTest.java b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLoggerEventTranslationExceptionTest.java
similarity index 96%
rename from log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggerEventTranslationExceptionTest.java
rename to log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLoggerEventTranslationExceptionTest.java
index bc7e9ca5456..a5a32b29f1a 100644
--- a/log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggerEventTranslationExceptionTest.java
+++ b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLoggerEventTranslationExceptionTest.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.logging.log4j.core.async;
+package org.apache.logging.log4j.async.logger;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertThrows;
@@ -46,7 +46,7 @@
@ContextSelectorType(AsyncLoggerContextSelector.class)
@SetSystemProperty(
key = Log4jPropertyKey.Constant.ASYNC_LOGGER_EXCEPTION_HANDLER_CLASS_NAME,
- value = "org.apache.logging.log4j.core.async.AsyncLoggerEventTranslationExceptionTest$TestExceptionHandler")
+ value = "org.apache.logging.log4j.async.logger.AsyncLoggerEventTranslationExceptionTest$TestExceptionHandler")
class AsyncLoggerEventTranslationExceptionTest {
@Test
diff --git a/log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggerLocationTest.java b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLoggerLocationTest.java
similarity index 98%
rename from log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggerLocationTest.java
rename to log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLoggerLocationTest.java
index fb81b286b0c..81899d4b0f7 100644
--- a/log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggerLocationTest.java
+++ b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLoggerLocationTest.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.logging.log4j.core.async;
+package org.apache.logging.log4j.async.logger;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
diff --git a/log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggerNanoTimeTest.java b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLoggerNanoTimeTest.java
similarity index 98%
rename from log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggerNanoTimeTest.java
rename to log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLoggerNanoTimeTest.java
index 02137cd983a..2ab6d4e1c86 100644
--- a/log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggerNanoTimeTest.java
+++ b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLoggerNanoTimeTest.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.logging.log4j.core.async;
+package org.apache.logging.log4j.async.logger;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertEquals;
diff --git a/log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggerTest.java b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLoggerTest.java
similarity index 98%
rename from log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggerTest.java
rename to log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLoggerTest.java
index 319e9d0e87e..a5e48de0d9b 100644
--- a/log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggerTest.java
+++ b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLoggerTest.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.logging.log4j.core.async;
+package org.apache.logging.log4j.async.logger;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertNotNull;
diff --git a/log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggerTestArgumentFreedOnErrorTest.java b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLoggerTestArgumentFreedOnErrorTest.java
similarity index 98%
rename from log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggerTestArgumentFreedOnErrorTest.java
rename to log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLoggerTestArgumentFreedOnErrorTest.java
index 17774c3765a..f66e1d76d76 100644
--- a/log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggerTestArgumentFreedOnErrorTest.java
+++ b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLoggerTestArgumentFreedOnErrorTest.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.logging.log4j.core.async;
+package org.apache.logging.log4j.async.logger;
import static org.junit.jupiter.api.Assertions.assertTrue;
diff --git a/log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggerThreadContextTest.java b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLoggerThreadContextTest.java
similarity index 98%
rename from log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggerThreadContextTest.java
rename to log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLoggerThreadContextTest.java
index 2cd7adf0ce6..8741a347b1f 100644
--- a/log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggerThreadContextTest.java
+++ b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLoggerThreadContextTest.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.logging.log4j.core.async;
+package org.apache.logging.log4j.async.logger;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
diff --git a/log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggerTimestampMessageTest.java b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLoggerTimestampMessageTest.java
similarity index 98%
rename from log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggerTimestampMessageTest.java
rename to log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLoggerTimestampMessageTest.java
index 256ee7130ed..89912ae0920 100644
--- a/log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggerTimestampMessageTest.java
+++ b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLoggerTimestampMessageTest.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.logging.log4j.core.async;
+package org.apache.logging.log4j.async.logger;
import static org.assertj.core.api.Assertions.assertThat;
diff --git a/log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggerUseAfterShutdownTest.java b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLoggerUseAfterShutdownTest.java
similarity index 97%
rename from log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggerUseAfterShutdownTest.java
rename to log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLoggerUseAfterShutdownTest.java
index 520300e05c2..912d2409c3d 100644
--- a/log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggerUseAfterShutdownTest.java
+++ b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLoggerUseAfterShutdownTest.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.logging.log4j.core.async;
+package org.apache.logging.log4j.async.logger;
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.Logger;
diff --git a/log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggersWithAsyncAppenderTest.java b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLoggersWithAsyncAppenderTest.java
similarity index 98%
rename from log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggersWithAsyncAppenderTest.java
rename to log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLoggersWithAsyncAppenderTest.java
index cb0c87d338c..04ca49d4db9 100644
--- a/log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggersWithAsyncAppenderTest.java
+++ b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLoggersWithAsyncAppenderTest.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.logging.log4j.core.async;
+package org.apache.logging.log4j.async.logger;
import static org.assertj.core.api.Assertions.assertThat;
diff --git a/log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggersWithAsyncLoggerConfigTest.java b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLoggersWithAsyncLoggerConfigTest.java
similarity index 98%
rename from log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggersWithAsyncLoggerConfigTest.java
rename to log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLoggersWithAsyncLoggerConfigTest.java
index c7690d858a9..0564601b315 100644
--- a/log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggersWithAsyncLoggerConfigTest.java
+++ b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncLoggersWithAsyncLoggerConfigTest.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.logging.log4j.core.async;
+package org.apache.logging.log4j.async.logger;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
diff --git a/log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/AsyncRootReloadTest.java b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncRootReloadTest.java
similarity index 97%
rename from log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/AsyncRootReloadTest.java
rename to log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncRootReloadTest.java
index 45807b6072d..bb7e1cecf0b 100644
--- a/log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/AsyncRootReloadTest.java
+++ b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncRootReloadTest.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.logging.log4j.core.async;
+package org.apache.logging.log4j.async.logger;
import java.io.File;
import java.net.URISyntaxException;
diff --git a/log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/AsyncThreadContextTest.java b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncThreadContextTest.java
similarity index 99%
rename from log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/AsyncThreadContextTest.java
rename to log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncThreadContextTest.java
index 819eaa0f90a..c8d57007bc1 100644
--- a/log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/AsyncThreadContextTest.java
+++ b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/AsyncThreadContextTest.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.logging.log4j.core.async;
+package org.apache.logging.log4j.async.logger;
import static org.assertj.core.api.Assertions.assertThat;
import static org.awaitility.Awaitility.waitAtMost;
diff --git a/log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/BasicAsyncLoggerContextSelectorTest.java b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/BasicAsyncLoggerContextSelectorTest.java
similarity index 98%
rename from log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/BasicAsyncLoggerContextSelectorTest.java
rename to log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/BasicAsyncLoggerContextSelectorTest.java
index dc38a338644..a0256ee8ef4 100644
--- a/log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/BasicAsyncLoggerContextSelectorTest.java
+++ b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/BasicAsyncLoggerContextSelectorTest.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.logging.log4j.core.async;
+package org.apache.logging.log4j.async.logger;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertEquals;
diff --git a/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/DefaultIncludeLocationTest.java b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/DefaultIncludeLocationTest.java
new file mode 100644
index 00000000000..9f92ff02c6b
--- /dev/null
+++ b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/DefaultIncludeLocationTest.java
@@ -0,0 +1,91 @@
+/*
+ * 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.
+ */
+package org.apache.logging.log4j.async.logger;
+
+import java.util.stream.Stream;
+import org.apache.logging.log4j.core.LoggerContext;
+import org.apache.logging.log4j.core.config.Configuration;
+import org.apache.logging.log4j.core.config.LoggerConfig;
+import org.apache.logging.log4j.core.config.NullConfiguration;
+import org.apache.logging.log4j.util.PropertiesUtil;
+import org.assertj.core.api.Assertions;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
+
+class DefaultIncludeLocationTest {
+
+ private static final String LOGGER_NAME = DefaultIncludeLocationTest.class.getName();
+
+ private static Stream loggerConfigs(final Configuration config) {
+ return Stream.of(
+ Arguments.of(
+ LoggerConfig.newBuilder()
+ .setConfig(config)
+ .setLoggerName(LOGGER_NAME)
+ .build(),
+ true),
+ Arguments.of(
+ LoggerConfig.RootLogger.newRootBuilder()
+ .setConfig(config)
+ .build(),
+ true),
+ Arguments.of(
+ AsyncLoggerConfig.newAsyncBuilder()
+ .setConfig(config)
+ .setLoggerName(LOGGER_NAME)
+ .build(),
+ false),
+ Arguments.of(
+ AsyncLoggerConfig.RootLogger.newAsyncRootBuilder()
+ .setConfig(config)
+ .build(),
+ false));
+ }
+
+ static Stream loggerContextDefaultLocation() {
+ final LoggerContext ctx = new LoggerContext("sync");
+ ctx.setProperties(PropertiesUtil.getProperties());
+ final NullConfiguration config = new NullConfiguration(ctx);
+ ctx.setConfiguration(config);
+ return loggerConfigs(config);
+ }
+
+ @ParameterizedTest
+ @MethodSource
+ void loggerContextDefaultLocation(final LoggerConfig loggerConfig, final boolean expected) {
+ Assertions.assertThat(loggerConfig.isIncludeLocation())
+ .as("Default `includeLocation` value")
+ .isEqualTo(expected);
+ }
+
+ static Stream asyncLoggerContextDefaultLocation() {
+ final AsyncLoggerContext ctx = new AsyncLoggerContext("async");
+ ctx.setProperties(PropertiesUtil.getProperties());
+ final NullConfiguration config = new NullConfiguration(ctx);
+ ctx.setConfiguration(config);
+ return loggerConfigs(config).map(args -> (LoggerConfig) args.get()[0]);
+ }
+
+ @ParameterizedTest
+ @MethodSource
+ void asyncLoggerContextDefaultLocation(final LoggerConfig loggerConfig) {
+ Assertions.assertThat(loggerConfig.isIncludeLocation())
+ .as("Default `includeLocation` value")
+ .isFalse();
+ }
+}
diff --git a/log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/DisruptorConfigurationInvalidTest.java b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/DisruptorConfigurationInvalidTest.java
similarity index 97%
rename from log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/DisruptorConfigurationInvalidTest.java
rename to log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/DisruptorConfigurationInvalidTest.java
index aec3757813b..c7742987d5e 100644
--- a/log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/DisruptorConfigurationInvalidTest.java
+++ b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/DisruptorConfigurationInvalidTest.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.logging.log4j.core.async;
+package org.apache.logging.log4j.async.logger;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertEquals;
diff --git a/log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/DisruptorConfigurationTest.java b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/DisruptorConfigurationTest.java
similarity index 98%
rename from log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/DisruptorConfigurationTest.java
rename to log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/DisruptorConfigurationTest.java
index 16dedf40372..190dbee16bc 100644
--- a/log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/DisruptorConfigurationTest.java
+++ b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/DisruptorConfigurationTest.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.logging.log4j.core.async;
+package org.apache.logging.log4j.async.logger;
import static org.assertj.core.api.Assertions.assertThat;
diff --git a/log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/GarbageFreeAsyncThreadContextTest.java b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/GarbageFreeAsyncThreadContextTest.java
similarity index 97%
rename from log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/GarbageFreeAsyncThreadContextTest.java
rename to log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/GarbageFreeAsyncThreadContextTest.java
index 8dab35c708c..5bb8bf789c6 100644
--- a/log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/GarbageFreeAsyncThreadContextTest.java
+++ b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/GarbageFreeAsyncThreadContextTest.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.logging.log4j.core.async;
+package org.apache.logging.log4j.async.logger;
import java.nio.file.Path;
import org.apache.logging.log4j.test.TestProperties;
diff --git a/log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/Log4j2Jira1688AsyncTest.java b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/Log4j2Jira1688AsyncTest.java
similarity index 98%
rename from log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/Log4j2Jira1688AsyncTest.java
rename to log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/Log4j2Jira1688AsyncTest.java
index 5b5e1ef57b9..220cad08a77 100644
--- a/log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/Log4j2Jira1688AsyncTest.java
+++ b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/Log4j2Jira1688AsyncTest.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.logging.log4j.core.async;
+package org.apache.logging.log4j.async.logger;
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/selector/CoreContextSelectors.java b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/NestedAsyncLoggerConfigTest.java
similarity index 63%
rename from log4j-core/src/main/java/org/apache/logging/log4j/core/selector/CoreContextSelectors.java
rename to log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/NestedAsyncLoggerConfigTest.java
index 51975ed947f..8a2161c955e 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/selector/CoreContextSelectors.java
+++ b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/NestedAsyncLoggerConfigTest.java
@@ -14,17 +14,8 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.logging.log4j.core.selector;
+package org.apache.logging.log4j.async.logger;
-import org.apache.logging.log4j.core.async.AsyncLoggerContextSelector;
-import org.apache.logging.log4j.core.async.BasicAsyncLoggerContextSelector;
+import org.apache.logging.log4j.core.test.config.AbstractNestedLoggerConfigTest;
-public class CoreContextSelectors {
-
- public static final Class>[] CLASSES = new Class>[] {
- ClassLoaderContextSelector.class,
- BasicContextSelector.class,
- AsyncLoggerContextSelector.class,
- BasicAsyncLoggerContextSelector.class
- };
-}
+public class NestedAsyncLoggerConfigTest extends AbstractNestedLoggerConfigTest {}
diff --git a/log4j-core-test/src/main/java/org/apache/logging/log4j/core/async/QueueFullAbstractTest.java b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/QueueFullAsyncAbstractTest.java
similarity index 53%
rename from log4j-core-test/src/main/java/org/apache/logging/log4j/core/async/QueueFullAbstractTest.java
rename to log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/QueueFullAsyncAbstractTest.java
index 5085f7ec4fd..1e5e4bf3bc0 100644
--- a/log4j-core-test/src/main/java/org/apache/logging/log4j/core/async/QueueFullAbstractTest.java
+++ b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/QueueFullAsyncAbstractTest.java
@@ -14,151 +14,72 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.logging.log4j.core.async;
+package org.apache.logging.log4j.async.logger;
-import static java.util.concurrent.TimeUnit.SECONDS;
import static org.assertj.core.api.Assertions.assertThat;
import com.lmax.disruptor.RingBuffer;
-import java.lang.reflect.Field;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
import java.util.List;
import java.util.Optional;
-import java.util.Stack;
import java.util.concurrent.CountDownLatch;
import java.util.stream.Collectors;
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.core.Appender;
-import org.apache.logging.log4j.core.LogEvent;
import org.apache.logging.log4j.core.LoggerContext;
-import org.apache.logging.log4j.core.appender.AsyncAppender;
import org.apache.logging.log4j.core.config.Configuration;
import org.apache.logging.log4j.core.config.LoggerConfig;
import org.apache.logging.log4j.core.test.async.BlockingAppender;
-import org.apache.logging.log4j.core.util.Constants;
+import org.apache.logging.log4j.core.test.async.QueueFullAbstractTest;
import org.apache.logging.log4j.status.StatusData;
-import org.apache.logging.log4j.status.StatusLogger;
import org.apache.logging.log4j.test.ListStatusListener;
-import org.apache.logging.log4j.test.junit.UsingStatusListener;
-import org.apache.logging.log4j.util.ReflectionUtil;
-import org.junit.jupiter.api.Tag;
-import org.junit.jupiter.api.Timeout;
-import org.junit.jupiter.api.Timeout.ThreadMode;
-/**
- * Tests queue full scenarios abstract superclass.
- */
-@Tag("async")
-@UsingStatusListener
-@Timeout(value = 5, unit = SECONDS, threadMode = ThreadMode.SEPARATE_THREAD)
-public abstract class QueueFullAbstractTest {
- protected static boolean TRACE = Boolean.getBoolean(QueueFullAbstractTest.class.getSimpleName() + ".TRACE");
- protected BlockingAppender blockingAppender;
- protected Unlocker unlocker;
-
- protected static final String APPENDER_NAME = "Blocking";
- protected static final int BUFFER_COUNT = 128;
- protected static final int MESSAGE_COUNT = BUFFER_COUNT + 2;
- protected static final Logger LOGGER = StatusLogger.getLogger();
-
- protected static class Unlocker extends Thread {
-
- final CountDownLatch countDownLatch;
- final BlockingAppender blockingAppender;
-
- Unlocker(final CountDownLatch countDownLatch, final BlockingAppender blockingAppender) {
- this.countDownLatch = countDownLatch;
- this.blockingAppender = blockingAppender;
- }
-
- @Override
- public void run() {
- try {
- countDownLatch.await();
- LOGGER.info("Unlocker activated. Sleeping 500 millis before taking action...");
- Thread.sleep(500);
- } catch (final InterruptedException e) {
- throw new RuntimeException(e);
- }
- LOGGER.info("Unlocker signalling BlockingAppender to proceed...");
- blockingAppender.countDownLatch.countDown();
- }
- }
-
- protected static class DomainObject {
-
- private final Logger innerLogger;
- private final Unlocker unlocker;
- private final int count;
-
- public DomainObject(final Logger innerLogger, final Unlocker unlocker, final int loggingCount) {
- this.innerLogger = innerLogger;
- this.unlocker = unlocker;
- this.count = loggingCount;
- }
-
- @Override
- public String toString() {
- for (int i = 0; i < count; i++) {
- LOGGER.info(
- "DomainObject logging message {}. Ring buffer capacity was {}, countdown latch was {}.",
- i,
- asyncRemainingCapacity(innerLogger),
- unlocker.countDownLatch.getCount());
- unlocker.countDownLatch.countDown();
- innerLogger.info("Logging in toString() #{}", i);
- }
- return "Who's bad?!";
- }
- }
+public abstract class QueueFullAsyncAbstractTest extends QueueFullAbstractTest {
private ListStatusListener statusListener;
- protected void testNormalQueueFullKeepsMessagesInOrder(
- final LoggerContext ctx, final BlockingAppender blockingAppender) throws Exception {
- checkConfig(ctx);
- final Logger logger = ctx.getLogger(getClass());
+ protected static void assertAsyncLogger(final LoggerContext ctx, final int expectedBufferSize) {
+ assertThat(ctx).isInstanceOf(AsyncLoggerContext.class);
+ assertThat(((AsyncLoggerContext) ctx)
+ .getAsyncLoggerDisruptor()
+ .getRingBuffer()
+ .getBufferSize())
+ .isEqualTo(expectedBufferSize);
- blockingAppender.countDownLatch = new CountDownLatch(1);
- final Unlocker unlocker = new Unlocker(new CountDownLatch(MESSAGE_COUNT - 1), blockingAppender);
- unlocker.start();
- asyncTest(logger, unlocker, blockingAppender);
- unlocker.join();
+ final Configuration config = ctx.getConfiguration();
+ assertThat(config).isNotNull();
+ assertThat(config.getRootLogger()).isNotInstanceOf(AsyncLoggerConfig.class);
}
- protected void checkConfig(final LoggerContext ctx) throws Exception {}
+ protected static void assertAsyncLoggerConfig(final LoggerContext ctx, final int expectedBufferSize) {
+ assertThat(ctx).isNotInstanceOf(AsyncLoggerContext.class);
- protected static void asyncTest(
- final Logger logger, final Unlocker unlocker, final BlockingAppender blockingAppender) {
- for (int i = 0; i < MESSAGE_COUNT; i++) {
- LOGGER.info(
- "Test logging message {}. Ring buffer capacity was {}, countdown latch was {}.",
- i,
- asyncRemainingCapacity(logger),
- unlocker.countDownLatch.getCount());
- unlocker.countDownLatch.countDown();
- final String param = "I'm innocent";
- logger.info("Logging innocent object #{}: {}", i, param);
- }
- LOGGER.info(
- "Waiting for message delivery: blockingAppender.logEvents.count={}.",
- blockingAppender.logEvents.size());
- while (blockingAppender.logEvents.size() < MESSAGE_COUNT) {
- Thread.yield();
- }
- LOGGER.info(
- "All {} message have been delivered: blockingAppender.logEvents.count={}.",
- MESSAGE_COUNT,
- blockingAppender.logEvents.size());
+ final Configuration config = ctx.getConfiguration();
+ assertThat(config).isNotNull();
+ assertThat(config.getRootLogger()).isInstanceOf(AsyncLoggerConfig.class);
+ final DisruptorConfiguration disruptorConfig = config.getExtension(DisruptorConfiguration.class);
+ final AsyncLoggerConfigDisruptor disruptor =
+ (AsyncLoggerConfigDisruptor) disruptorConfig.getAsyncLoggerConfigDelegate();
+ assertThat(disruptor.getRingBuffer().getBufferSize()).isEqualTo(expectedBufferSize);
+ }
- final Stack actual = transform(blockingAppender.logEvents);
- for (int i = 0; i < MESSAGE_COUNT; i++) {
- assertThat(actual.pop()).isEqualTo("Logging innocent object #%d: I'm innocent", i);
+ @Override
+ protected long asyncRemainingCapacity(final Logger logger) {
+ if (logger instanceof final AsyncLogger asyncLogger) {
+ return Optional.ofNullable(asyncLogger.getAsyncLoggerDisruptor())
+ .map(AsyncLoggerDisruptor::getRingBuffer)
+ .map(RingBuffer::remainingCapacity)
+ .orElse(0L);
+ } else {
+ final LoggerConfig loggerConfig = ((org.apache.logging.log4j.core.Logger) logger).get();
+ if (loggerConfig instanceof final AsyncLoggerConfig asyncLoggerConfig) {
+ return Optional.ofNullable(
+ (AsyncLoggerConfigDisruptor) asyncLoggerConfig.getAsyncLoggerConfigDelegate())
+ .map(AsyncLoggerConfigDisruptor::getRingBuffer)
+ .map(RingBuffer::remainingCapacity)
+ .orElse(0L);
+ }
}
- assertThat(actual).isEmpty();
+ return super.asyncRemainingCapacity(logger);
}
public void testLoggingFromToStringCausesOutOfOrderMessages(
@@ -218,90 +139,30 @@ void asyncRecursiveTest(final Logger logger, final Unlocker unlocker, final Bloc
assertThat(actual).hasSize(MESSAGE_COUNT).contains(expected);
}
- static Stack transform(final List logEvents) {
- final List filtered = getMessages(logEvents);
- Collections.reverse(filtered);
- final Stack result = new Stack<>();
- result.addAll(filtered);
- return result;
- }
+ protected class DomainObject {
+
+ private final Logger innerLogger;
+ private final Unlocker unlocker;
+ private final int count;
- static List getMessages(final List logEvents) {
- final List filtered = new ArrayList<>(logEvents.size());
- for (LogEvent event : logEvents) {
- filtered.add(event.getMessage().getFormattedMessage());
+ public DomainObject(final Logger innerLogger, final Unlocker unlocker, final int loggingCount) {
+ this.innerLogger = innerLogger;
+ this.unlocker = unlocker;
+ this.count = loggingCount;
}
- return filtered;
- }
- static long asyncRemainingCapacity(final Logger logger) {
- if (logger instanceof AsyncLogger asyncLogger) {
- return Optional.ofNullable(asyncLogger.getAsyncLoggerDisruptor())
- .map(AsyncLoggerDisruptor::getRingBuffer)
- .map(RingBuffer::remainingCapacity)
- .orElse(0L);
- } else {
- final LoggerConfig loggerConfig = ((org.apache.logging.log4j.core.Logger) logger).get();
- if (loggerConfig instanceof AsyncLoggerConfig asyncLoggerConfig) {
- return Optional.ofNullable(
- (AsyncLoggerConfigDisruptor) asyncLoggerConfig.getAsyncLoggerConfigDelegate())
- .map(AsyncLoggerConfigDisruptor::getRingBuffer)
- .map(RingBuffer::remainingCapacity)
- .orElse(0L);
- } else {
- final Appender async = loggerConfig.getAppenders().get("async");
- if (async instanceof AsyncAppender) {
- return ((AsyncAppender) async).getQueueCapacity();
- }
+ @Override
+ public String toString() {
+ for (int i = 0; i < count; i++) {
+ LOGGER.info(
+ "DomainObject logging message {}. Ring buffer capacity was {}, countdown latch was {}.",
+ i,
+ asyncRemainingCapacity(innerLogger),
+ unlocker.countDownLatch.getCount());
+ unlocker.countDownLatch.countDown();
+ innerLogger.info("Logging in toString() #{}", i);
}
+ return "Who's bad?!";
}
- throw new IllegalStateException("Neither Async Loggers nor AsyncAppender are configured");
- }
-
- protected static Field field(final Class> c, final String name) throws NoSuchFieldException {
- final Field f = c.getDeclaredField(name);
- ReflectionUtil.makeAccessible(f);
- return f;
- }
-
- protected static void assertAsyncAppender(final LoggerContext ctx) {
- assertThat(ctx).isNotInstanceOf(AsyncLoggerContext.class);
-
- final Configuration config = ctx.getConfiguration();
- assertThat(config).isNotNull();
- assertThat(config.getRootLogger()).isNotInstanceOf(AsyncLoggerConfig.class);
-
- final Collection appenders =
- config.getRootLogger().getAppenders().values();
- assertThat(appenders).hasSize(1).allMatch(AsyncAppender.class::isInstance);
- }
-
- protected static void assertAsyncLogger(final LoggerContext ctx, final int expectedBufferSize) {
- assertThat(ctx).isInstanceOf(AsyncLoggerContext.class);
- assertThat(((AsyncLoggerContext) ctx)
- .getAsyncLoggerDisruptor()
- .getRingBuffer()
- .getBufferSize())
- .isEqualTo(expectedBufferSize);
-
- final Configuration config = ctx.getConfiguration();
- assertThat(config).isNotNull();
- assertThat(config.getRootLogger()).isNotInstanceOf(AsyncLoggerConfig.class);
- }
-
- protected static void assertAsyncLoggerConfig(final LoggerContext ctx, final int expectedBufferSize) {
- assertThat(ctx).isNotInstanceOf(AsyncLoggerContext.class);
-
- final Configuration config = ctx.getConfiguration();
- assertThat(config).isNotNull();
- assertThat(config.getRootLogger()).isInstanceOf(AsyncLoggerConfig.class);
- final DisruptorConfiguration disruptorConfig = config.getExtension(DisruptorConfiguration.class);
- final AsyncLoggerConfigDisruptor disruptor =
- (AsyncLoggerConfigDisruptor) disruptorConfig.getAsyncLoggerConfigDelegate();
- assertThat(disruptor.getRingBuffer().getBufferSize()).isEqualTo(expectedBufferSize);
- }
-
- protected static void assertFormatMessagesInBackground() {
- assertThat(Constants.FORMAT_MESSAGES_IN_BACKGROUND).isTrue();
}
}
diff --git a/log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/QueueFullAsyncLogger2Test.java b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/QueueFullAsyncLogger2Test.java
similarity index 89%
rename from log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/QueueFullAsyncLogger2Test.java
rename to log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/QueueFullAsyncLogger2Test.java
index beda3aa982c..55e0b74025d 100644
--- a/log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/QueueFullAsyncLogger2Test.java
+++ b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/QueueFullAsyncLogger2Test.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.logging.log4j.core.async;
+package org.apache.logging.log4j.async.logger;
import org.apache.logging.log4j.core.LoggerContext;
import org.apache.logging.log4j.test.junit.SetTestProperty;
@@ -24,11 +24,10 @@
* is immutable.
*/
@SetTestProperty(key = "AsyncLogger.formatMsg", value = "true")
-public class QueueFullAsyncLogger2Test extends QueueFullAsyncLoggerTest {
+public class QueueFullAsyncLogger2Test extends QueueFullAsyncAbstractTest {
@Override
protected void checkConfig(final LoggerContext ctx) {
- super.checkConfig(ctx);
assertFormatMessagesInBackground();
}
}
diff --git a/log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/QueueFullAsyncLogger3Test.java b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/QueueFullAsyncLogger3Test.java
similarity index 87%
rename from log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/QueueFullAsyncLogger3Test.java
rename to log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/QueueFullAsyncLogger3Test.java
index 1df420b8d78..d9416e79b8e 100644
--- a/log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/QueueFullAsyncLogger3Test.java
+++ b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/QueueFullAsyncLogger3Test.java
@@ -14,40 +14,41 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.logging.log4j.core.async;
+package org.apache.logging.log4j.async.logger;
import static java.util.concurrent.TimeUnit.SECONDS;
-import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.Assert.assertTrue;
import java.util.concurrent.CountDownLatch;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.core.GarbageCollectionHelper;
import org.apache.logging.log4j.core.LoggerContext;
+import org.apache.logging.log4j.core.async.AsyncQueueFullPolicyFactory;
+import org.apache.logging.log4j.core.async.DiscardingAsyncQueueFullPolicy;
import org.apache.logging.log4j.core.test.async.BlockingAppender;
+import org.apache.logging.log4j.core.test.junit.ContextSelectorType;
import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
import org.apache.logging.log4j.core.test.junit.Named;
import org.apache.logging.log4j.message.Message;
import org.apache.logging.log4j.test.junit.SetTestProperty;
+import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.Timeout;
/**
* Tests queue full scenarios with pure AsyncLoggers (all loggers async).
*/
-@SetTestProperty(
- key = "LoggerContext.selector",
- value = "org.apache.logging.log4j.core.async.AsyncLoggerContextSelector")
+@ContextSelectorType(AsyncLoggerContextSelector.class)
@SetTestProperty(key = "AsyncLogger.ringBufferSize", value = "128")
@SetTestProperty(key = "AsyncLogger.formatMsg", value = "true")
@SetTestProperty(key = "AsyncLogger.queueFullPolicy", value = "Discard")
-public class QueueFullAsyncLogger3Test extends QueueFullAbstractTest {
+public class QueueFullAsyncLogger3Test extends QueueFullAsyncAbstractTest {
@Override
protected void checkConfig(final LoggerContext ctx) {
assertAsyncLogger(ctx, 128);
assertFormatMessagesInBackground();
- assertThat(AsyncQueueFullPolicyFactory.create()).isInstanceOf(DiscardingAsyncQueueFullPolicy.class);
+ Assertions.assertThat(AsyncQueueFullPolicyFactory.create()).isInstanceOf(DiscardingAsyncQueueFullPolicy.class);
}
@Test
diff --git a/log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/QueueFullAsyncLoggerConfig2Test.java b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/QueueFullAsyncLoggerConfig2Test.java
similarity index 96%
rename from log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/QueueFullAsyncLoggerConfig2Test.java
rename to log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/QueueFullAsyncLoggerConfig2Test.java
index ef5f5f0455e..48e34790368 100644
--- a/log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/QueueFullAsyncLoggerConfig2Test.java
+++ b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/QueueFullAsyncLoggerConfig2Test.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.logging.log4j.core.async;
+package org.apache.logging.log4j.async.logger;
import org.apache.logging.log4j.core.LoggerContext;
import org.apache.logging.log4j.test.junit.SetTestProperty;
diff --git a/log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/QueueFullAsyncLoggerConfigLoggingFromToString2Test.java b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/QueueFullAsyncLoggerConfigLoggingFromToString2Test.java
similarity index 96%
rename from log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/QueueFullAsyncLoggerConfigLoggingFromToString2Test.java
rename to log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/QueueFullAsyncLoggerConfigLoggingFromToString2Test.java
index 7820f1c1e54..9d886ce5952 100644
--- a/log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/QueueFullAsyncLoggerConfigLoggingFromToString2Test.java
+++ b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/QueueFullAsyncLoggerConfigLoggingFromToString2Test.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.logging.log4j.core.async;
+package org.apache.logging.log4j.async.logger;
import org.apache.logging.log4j.core.LoggerContext;
import org.apache.logging.log4j.test.junit.SetTestProperty;
diff --git a/log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/QueueFullAsyncLoggerConfigLoggingFromToStringTest.java b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/QueueFullAsyncLoggerConfigLoggingFromToStringTest.java
similarity index 96%
rename from log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/QueueFullAsyncLoggerConfigLoggingFromToStringTest.java
rename to log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/QueueFullAsyncLoggerConfigLoggingFromToStringTest.java
index cdeec6a0f52..900e1711e4f 100644
--- a/log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/QueueFullAsyncLoggerConfigLoggingFromToStringTest.java
+++ b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/QueueFullAsyncLoggerConfigLoggingFromToStringTest.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.logging.log4j.core.async;
+package org.apache.logging.log4j.async.logger;
import static org.assertj.core.api.Assertions.assertThat;
@@ -31,7 +31,7 @@
*/
@SetTestProperty(key = "Web.isWebApp", value = "false")
@SetTestProperty(key = "AsyncLoggerConfig.ringBufferSize", value = "128")
-public class QueueFullAsyncLoggerConfigLoggingFromToStringTest extends QueueFullAbstractTest {
+public class QueueFullAsyncLoggerConfigLoggingFromToStringTest extends QueueFullAsyncAbstractTest {
@Override
@Test
diff --git a/log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/QueueFullAsyncLoggerConfigTest.java b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/QueueFullAsyncLoggerConfigTest.java
similarity index 93%
rename from log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/QueueFullAsyncLoggerConfigTest.java
rename to log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/QueueFullAsyncLoggerConfigTest.java
index 76eaa471dd1..0eb7e853b5f 100644
--- a/log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/QueueFullAsyncLoggerConfigTest.java
+++ b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/QueueFullAsyncLoggerConfigTest.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.logging.log4j.core.async;
+package org.apache.logging.log4j.async.logger;
import org.apache.logging.log4j.core.LoggerContext;
import org.apache.logging.log4j.core.test.async.BlockingAppender;
@@ -27,7 +27,7 @@
* Tests queue full scenarios with AsyncLoggers in configuration.
*/
@SetTestProperty(key = "AsyncLoggerConfig.ringBufferSize", value = "128")
-public class QueueFullAsyncLoggerConfigTest extends QueueFullAbstractTest {
+public class QueueFullAsyncLoggerConfigTest extends QueueFullAsyncAbstractTest {
@Override
@Test
diff --git a/log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/QueueFullAsyncLoggerLoggingFromToStringTest.java b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/QueueFullAsyncLoggerLoggingFromToStringTest.java
similarity index 89%
rename from log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/QueueFullAsyncLoggerLoggingFromToStringTest.java
rename to log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/QueueFullAsyncLoggerLoggingFromToStringTest.java
index 49e3e125b84..d95ec2966a1 100644
--- a/log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/QueueFullAsyncLoggerLoggingFromToStringTest.java
+++ b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/QueueFullAsyncLoggerLoggingFromToStringTest.java
@@ -14,10 +14,11 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.logging.log4j.core.async;
+package org.apache.logging.log4j.async.logger;
import org.apache.logging.log4j.core.LoggerContext;
import org.apache.logging.log4j.core.test.async.BlockingAppender;
+import org.apache.logging.log4j.core.test.junit.ContextSelectorType;
import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
import org.apache.logging.log4j.core.test.junit.Named;
import org.apache.logging.log4j.test.junit.SetTestProperty;
@@ -26,11 +27,9 @@
/**
* Tests queue full scenarios with pure AsyncLoggers (all loggers async).
*/
-@SetTestProperty(
- key = "LoggerContext.selector",
- value = "org.apache.logging.log4j.core.async.AsyncLoggerContextSelector")
+@ContextSelectorType(AsyncLoggerContextSelector.class)
@SetTestProperty(key = "AsyncLogger.ringBufferSize", value = "128")
-public class QueueFullAsyncLoggerLoggingFromToStringTest extends QueueFullAbstractTest {
+public class QueueFullAsyncLoggerLoggingFromToStringTest extends QueueFullAsyncAbstractTest {
@Override
@Test
diff --git a/log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/QueueFullAsyncLoggerTest.java b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/QueueFullAsyncLoggerTest.java
similarity index 87%
rename from log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/QueueFullAsyncLoggerTest.java
rename to log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/QueueFullAsyncLoggerTest.java
index 064517ae63a..f1e8e441073 100644
--- a/log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/QueueFullAsyncLoggerTest.java
+++ b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/QueueFullAsyncLoggerTest.java
@@ -14,10 +14,11 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.logging.log4j.core.async;
+package org.apache.logging.log4j.async.logger;
import org.apache.logging.log4j.core.LoggerContext;
import org.apache.logging.log4j.core.test.async.BlockingAppender;
+import org.apache.logging.log4j.core.test.junit.ContextSelectorType;
import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
import org.apache.logging.log4j.core.test.junit.Named;
import org.apache.logging.log4j.test.junit.SetTestProperty;
@@ -26,11 +27,9 @@
/**
* Tests queue full scenarios with pure AsyncLoggers (all loggers async).
*/
-@SetTestProperty(
- key = "LoggerContext.selector",
- value = "org.apache.logging.log4j.core.async.AsyncLoggerContextSelector")
+@ContextSelectorType(AsyncLoggerContextSelector.class)
@SetTestProperty(key = "AsyncLogger.ringBufferSize", value = "128")
-public class QueueFullAsyncLoggerTest extends QueueFullAbstractTest {
+public class QueueFullAsyncLoggerTest extends QueueFullAsyncAbstractTest {
@Override
@Test
diff --git a/log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/RingBufferLogEventTest.java b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/RingBufferLogEventTest.java
similarity index 99%
rename from log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/RingBufferLogEventTest.java
rename to log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/RingBufferLogEventTest.java
index f2995c2461f..edefd4975c3 100644
--- a/log4j-async-logger/src/test/java/org/apache/logging/log4j/core/async/RingBufferLogEventTest.java
+++ b/log4j-async-logger/src/test/java/org/apache/logging/log4j/async/logger/RingBufferLogEventTest.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.logging.log4j.core.async;
+package org.apache.logging.log4j.async.logger;
import static org.assertj.core.api.Assertions.as;
import static org.assertj.core.api.Assertions.assertThat;
diff --git a/log4j-async-logger/src/test/resources/org/apache/logging/log4j/core/async/AsyncLoggerClassLoadDeadlockTest.xml b/log4j-async-logger/src/test/resources/org/apache/logging/log4j/async/logger/AsyncLoggerClassLoadDeadlockTest.xml
similarity index 100%
rename from log4j-async-logger/src/test/resources/org/apache/logging/log4j/core/async/AsyncLoggerClassLoadDeadlockTest.xml
rename to log4j-async-logger/src/test/resources/org/apache/logging/log4j/async/logger/AsyncLoggerClassLoadDeadlockTest.xml
diff --git a/log4j-async-logger/src/test/resources/org/apache/logging/log4j/core/async/AsyncLoggerConfig2Test.xml b/log4j-async-logger/src/test/resources/org/apache/logging/log4j/async/logger/AsyncLoggerConfig2Test.xml
similarity index 100%
rename from log4j-async-logger/src/test/resources/org/apache/logging/log4j/core/async/AsyncLoggerConfig2Test.xml
rename to log4j-async-logger/src/test/resources/org/apache/logging/log4j/async/logger/AsyncLoggerConfig2Test.xml
diff --git a/log4j-async-logger/src/test/resources/org/apache/logging/log4j/core/async/AsyncLoggerConfig3Test.xml b/log4j-async-logger/src/test/resources/org/apache/logging/log4j/async/logger/AsyncLoggerConfig3Test.xml
similarity index 100%
rename from log4j-async-logger/src/test/resources/org/apache/logging/log4j/core/async/AsyncLoggerConfig3Test.xml
rename to log4j-async-logger/src/test/resources/org/apache/logging/log4j/async/logger/AsyncLoggerConfig3Test.xml
diff --git a/log4j-async-logger/src/test/resources/org/apache/logging/log4j/core/async/AsyncLoggerConfig4Test.xml b/log4j-async-logger/src/test/resources/org/apache/logging/log4j/async/logger/AsyncLoggerConfig4Test.xml
similarity index 100%
rename from log4j-async-logger/src/test/resources/org/apache/logging/log4j/core/async/AsyncLoggerConfig4Test.xml
rename to log4j-async-logger/src/test/resources/org/apache/logging/log4j/async/logger/AsyncLoggerConfig4Test.xml
diff --git a/log4j-async-logger/src/test/resources/org/apache/logging/log4j/core/async/AsyncLoggerConfigAutoFlushTest.xml b/log4j-async-logger/src/test/resources/org/apache/logging/log4j/async/logger/AsyncLoggerConfigAutoFlushTest.xml
similarity index 100%
rename from log4j-async-logger/src/test/resources/org/apache/logging/log4j/core/async/AsyncLoggerConfigAutoFlushTest.xml
rename to log4j-async-logger/src/test/resources/org/apache/logging/log4j/async/logger/AsyncLoggerConfigAutoFlushTest.xml
diff --git a/log4j-async-logger/src/test/resources/org/apache/logging/log4j/core/async/AsyncLoggerConfigErrorOnFormat.xml b/log4j-async-logger/src/test/resources/org/apache/logging/log4j/async/logger/AsyncLoggerConfigErrorOnFormat.xml
similarity index 100%
rename from log4j-async-logger/src/test/resources/org/apache/logging/log4j/core/async/AsyncLoggerConfigErrorOnFormat.xml
rename to log4j-async-logger/src/test/resources/org/apache/logging/log4j/async/logger/AsyncLoggerConfigErrorOnFormat.xml
diff --git a/log4j-async-logger/src/test/resources/org/apache/logging/log4j/core/async/AsyncLoggerConfigTest.xml b/log4j-async-logger/src/test/resources/org/apache/logging/log4j/async/logger/AsyncLoggerConfigTest.xml
similarity index 100%
rename from log4j-async-logger/src/test/resources/org/apache/logging/log4j/core/async/AsyncLoggerConfigTest.xml
rename to log4j-async-logger/src/test/resources/org/apache/logging/log4j/async/logger/AsyncLoggerConfigTest.xml
diff --git a/log4j-async-logger/src/test/resources/org/apache/logging/log4j/core/async/AsyncLoggerConfigUseAfterShutdownTest.xml b/log4j-async-logger/src/test/resources/org/apache/logging/log4j/async/logger/AsyncLoggerConfigUseAfterShutdownTest.xml
similarity index 100%
rename from log4j-async-logger/src/test/resources/org/apache/logging/log4j/core/async/AsyncLoggerConfigUseAfterShutdownTest.xml
rename to log4j-async-logger/src/test/resources/org/apache/logging/log4j/async/logger/AsyncLoggerConfigUseAfterShutdownTest.xml
diff --git a/log4j-async-logger/src/test/resources/org/apache/logging/log4j/core/async/AsyncLoggerConfigWithAsyncEnabledTest.xml b/log4j-async-logger/src/test/resources/org/apache/logging/log4j/async/logger/AsyncLoggerConfigWithAsyncEnabledTest.xml
similarity index 100%
rename from log4j-async-logger/src/test/resources/org/apache/logging/log4j/core/async/AsyncLoggerConfigWithAsyncEnabledTest.xml
rename to log4j-async-logger/src/test/resources/org/apache/logging/log4j/async/logger/AsyncLoggerConfigWithAsyncEnabledTest.xml
diff --git a/log4j-async-logger/src/test/resources/org/apache/logging/log4j/core/async/AsyncLoggerCustomSelectorLocationTest.xml b/log4j-async-logger/src/test/resources/org/apache/logging/log4j/async/logger/AsyncLoggerCustomSelectorLocationTest.xml
similarity index 100%
rename from log4j-async-logger/src/test/resources/org/apache/logging/log4j/core/async/AsyncLoggerCustomSelectorLocationTest.xml
rename to log4j-async-logger/src/test/resources/org/apache/logging/log4j/async/logger/AsyncLoggerCustomSelectorLocationTest.xml
diff --git a/log4j-async-logger/src/test/resources/org/apache/logging/log4j/core/async/AsyncLoggerDefaultLocationTest.xml b/log4j-async-logger/src/test/resources/org/apache/logging/log4j/async/logger/AsyncLoggerDefaultLocationTest.xml
similarity index 100%
rename from log4j-async-logger/src/test/resources/org/apache/logging/log4j/core/async/AsyncLoggerDefaultLocationTest.xml
rename to log4j-async-logger/src/test/resources/org/apache/logging/log4j/async/logger/AsyncLoggerDefaultLocationTest.xml
diff --git a/log4j-async-logger/src/test/resources/org/apache/logging/log4j/core/async/AsyncLoggerEventTranslationExceptionTest.xml b/log4j-async-logger/src/test/resources/org/apache/logging/log4j/async/logger/AsyncLoggerEventTranslationExceptionTest.xml
similarity index 100%
rename from log4j-async-logger/src/test/resources/org/apache/logging/log4j/core/async/AsyncLoggerEventTranslationExceptionTest.xml
rename to log4j-async-logger/src/test/resources/org/apache/logging/log4j/async/logger/AsyncLoggerEventTranslationExceptionTest.xml
diff --git a/log4j-async-logger/src/test/resources/org/apache/logging/log4j/core/async/AsyncLoggerLocationTest.xml b/log4j-async-logger/src/test/resources/org/apache/logging/log4j/async/logger/AsyncLoggerLocationTest.xml
similarity index 100%
rename from log4j-async-logger/src/test/resources/org/apache/logging/log4j/core/async/AsyncLoggerLocationTest.xml
rename to log4j-async-logger/src/test/resources/org/apache/logging/log4j/async/logger/AsyncLoggerLocationTest.xml
diff --git a/log4j-async-logger/src/test/resources/org/apache/logging/log4j/core/async/AsyncLoggerNanoTimeTest.xml b/log4j-async-logger/src/test/resources/org/apache/logging/log4j/async/logger/AsyncLoggerNanoTimeTest.xml
similarity index 100%
rename from log4j-async-logger/src/test/resources/org/apache/logging/log4j/core/async/AsyncLoggerNanoTimeTest.xml
rename to log4j-async-logger/src/test/resources/org/apache/logging/log4j/async/logger/AsyncLoggerNanoTimeTest.xml
diff --git a/log4j-async-logger/src/test/resources/org/apache/logging/log4j/core/async/AsyncLoggerTest.xml b/log4j-async-logger/src/test/resources/org/apache/logging/log4j/async/logger/AsyncLoggerTest.xml
similarity index 100%
rename from log4j-async-logger/src/test/resources/org/apache/logging/log4j/core/async/AsyncLoggerTest.xml
rename to log4j-async-logger/src/test/resources/org/apache/logging/log4j/async/logger/AsyncLoggerTest.xml
diff --git a/log4j-async-logger/src/test/resources/org/apache/logging/log4j/core/async/AsyncLoggerTestArgumentFreedOnErrorTest.xml b/log4j-async-logger/src/test/resources/org/apache/logging/log4j/async/logger/AsyncLoggerTestArgumentFreedOnErrorTest.xml
similarity index 100%
rename from log4j-async-logger/src/test/resources/org/apache/logging/log4j/core/async/AsyncLoggerTestArgumentFreedOnErrorTest.xml
rename to log4j-async-logger/src/test/resources/org/apache/logging/log4j/async/logger/AsyncLoggerTestArgumentFreedOnErrorTest.xml
diff --git a/log4j-async-logger/src/test/resources/org/apache/logging/log4j/core/async/AsyncLoggerThreadContextTest.xml b/log4j-async-logger/src/test/resources/org/apache/logging/log4j/async/logger/AsyncLoggerThreadContextTest.xml
similarity index 100%
rename from log4j-async-logger/src/test/resources/org/apache/logging/log4j/core/async/AsyncLoggerThreadContextTest.xml
rename to log4j-async-logger/src/test/resources/org/apache/logging/log4j/async/logger/AsyncLoggerThreadContextTest.xml
diff --git a/log4j-async-logger/src/test/resources/org/apache/logging/log4j/core/async/AsyncLoggerTimestampMessageTest.xml b/log4j-async-logger/src/test/resources/org/apache/logging/log4j/async/logger/AsyncLoggerTimestampMessageTest.xml
similarity index 100%
rename from log4j-async-logger/src/test/resources/org/apache/logging/log4j/core/async/AsyncLoggerTimestampMessageTest.xml
rename to log4j-async-logger/src/test/resources/org/apache/logging/log4j/async/logger/AsyncLoggerTimestampMessageTest.xml
diff --git a/log4j-async-logger/src/test/resources/org/apache/logging/log4j/core/async/AsyncLoggerUseAfterShutdownTest.xml b/log4j-async-logger/src/test/resources/org/apache/logging/log4j/async/logger/AsyncLoggerUseAfterShutdownTest.xml
similarity index 100%
rename from log4j-async-logger/src/test/resources/org/apache/logging/log4j/core/async/AsyncLoggerUseAfterShutdownTest.xml
rename to log4j-async-logger/src/test/resources/org/apache/logging/log4j/async/logger/AsyncLoggerUseAfterShutdownTest.xml
diff --git a/log4j-async-logger/src/test/resources/org/apache/logging/log4j/core/async/AsyncLoggersWithAsyncAppenderTest.xml b/log4j-async-logger/src/test/resources/org/apache/logging/log4j/async/logger/AsyncLoggersWithAsyncAppenderTest.xml
similarity index 100%
rename from log4j-async-logger/src/test/resources/org/apache/logging/log4j/core/async/AsyncLoggersWithAsyncAppenderTest.xml
rename to log4j-async-logger/src/test/resources/org/apache/logging/log4j/async/logger/AsyncLoggersWithAsyncAppenderTest.xml
diff --git a/log4j-async-logger/src/test/resources/org/apache/logging/log4j/core/async/AsyncLoggersWithAsyncLoggerConfigTest.xml b/log4j-async-logger/src/test/resources/org/apache/logging/log4j/async/logger/AsyncLoggersWithAsyncLoggerConfigTest.xml
similarity index 100%
rename from log4j-async-logger/src/test/resources/org/apache/logging/log4j/core/async/AsyncLoggersWithAsyncLoggerConfigTest.xml
rename to log4j-async-logger/src/test/resources/org/apache/logging/log4j/async/logger/AsyncLoggersWithAsyncLoggerConfigTest.xml
diff --git a/log4j-async-logger/src/test/resources/org/apache/logging/log4j/core/async/AsyncRootReloadTest.xml b/log4j-async-logger/src/test/resources/org/apache/logging/log4j/async/logger/AsyncRootReloadTest.xml
similarity index 100%
rename from log4j-async-logger/src/test/resources/org/apache/logging/log4j/core/async/AsyncRootReloadTest.xml
rename to log4j-async-logger/src/test/resources/org/apache/logging/log4j/async/logger/AsyncRootReloadTest.xml
diff --git a/log4j-async-logger/src/test/resources/org/apache/logging/log4j/core/async/AsyncThreadContextTest/ALL_ASYNC.xml b/log4j-async-logger/src/test/resources/org/apache/logging/log4j/async/logger/AsyncThreadContextTest/ALL_ASYNC.xml
similarity index 100%
rename from log4j-async-logger/src/test/resources/org/apache/logging/log4j/core/async/AsyncThreadContextTest/ALL_ASYNC.xml
rename to log4j-async-logger/src/test/resources/org/apache/logging/log4j/async/logger/AsyncThreadContextTest/ALL_ASYNC.xml
diff --git a/log4j-async-logger/src/test/resources/org/apache/logging/log4j/core/async/AsyncThreadContextTest/BOTH_ALL_ASYNC_AND_MIXED.xml b/log4j-async-logger/src/test/resources/org/apache/logging/log4j/async/logger/AsyncThreadContextTest/BOTH_ALL_ASYNC_AND_MIXED.xml
similarity index 100%
rename from log4j-async-logger/src/test/resources/org/apache/logging/log4j/core/async/AsyncThreadContextTest/BOTH_ALL_ASYNC_AND_MIXED.xml
rename to log4j-async-logger/src/test/resources/org/apache/logging/log4j/async/logger/AsyncThreadContextTest/BOTH_ALL_ASYNC_AND_MIXED.xml
diff --git a/log4j-async-logger/src/test/resources/org/apache/logging/log4j/core/async/AsyncThreadContextTest/MIXED.xml b/log4j-async-logger/src/test/resources/org/apache/logging/log4j/async/logger/AsyncThreadContextTest/MIXED.xml
similarity index 100%
rename from log4j-async-logger/src/test/resources/org/apache/logging/log4j/core/async/AsyncThreadContextTest/MIXED.xml
rename to log4j-async-logger/src/test/resources/org/apache/logging/log4j/async/logger/AsyncThreadContextTest/MIXED.xml
diff --git a/log4j-async-logger/src/test/resources/org/apache/logging/log4j/core/async/DisruptorConfigurationInvalidTest.xml b/log4j-async-logger/src/test/resources/org/apache/logging/log4j/async/logger/DisruptorConfigurationInvalidTest.xml
similarity index 100%
rename from log4j-async-logger/src/test/resources/org/apache/logging/log4j/core/async/DisruptorConfigurationInvalidTest.xml
rename to log4j-async-logger/src/test/resources/org/apache/logging/log4j/async/logger/DisruptorConfigurationInvalidTest.xml
diff --git a/log4j-async-logger/src/test/resources/org/apache/logging/log4j/core/async/DisruptorConfigurationTest.xml b/log4j-async-logger/src/test/resources/org/apache/logging/log4j/async/logger/DisruptorConfigurationTest.xml
similarity index 91%
rename from log4j-async-logger/src/test/resources/org/apache/logging/log4j/core/async/DisruptorConfigurationTest.xml
rename to log4j-async-logger/src/test/resources/org/apache/logging/log4j/async/logger/DisruptorConfigurationTest.xml
index f52b0d58c3b..2265a4963ef 100644
--- a/log4j-async-logger/src/test/resources/org/apache/logging/log4j/core/async/DisruptorConfigurationTest.xml
+++ b/log4j-async-logger/src/test/resources/org/apache/logging/log4j/async/logger/DisruptorConfigurationTest.xml
@@ -27,5 +27,5 @@
+ class="org.apache.logging.log4j.async.logger.DisruptorConfigurationTest$YieldingWaitStrategyFactory" />
diff --git a/log4j-async-logger/src/test/resources/org/apache/logging/log4j/core/async/Log4j2Jira1688AsyncTest.xml b/log4j-async-logger/src/test/resources/org/apache/logging/log4j/async/logger/Log4j2Jira1688AsyncTest.xml
similarity index 100%
rename from log4j-async-logger/src/test/resources/org/apache/logging/log4j/core/async/Log4j2Jira1688AsyncTest.xml
rename to log4j-async-logger/src/test/resources/org/apache/logging/log4j/async/logger/Log4j2Jira1688AsyncTest.xml
diff --git a/log4j-core-test/src/test/resources/logger-config/AsyncLoggerConfig/default-level.xml b/log4j-async-logger/src/test/resources/org/apache/logging/log4j/async/logger/NestedAsyncLoggerConfigTest/default-level.xml
similarity index 100%
rename from log4j-core-test/src/test/resources/logger-config/AsyncLoggerConfig/default-level.xml
rename to log4j-async-logger/src/test/resources/org/apache/logging/log4j/async/logger/NestedAsyncLoggerConfigTest/default-level.xml
diff --git a/log4j-core-test/src/test/resources/logger-config/AsyncLoggerConfig/inherit-level.xml b/log4j-async-logger/src/test/resources/org/apache/logging/log4j/async/logger/NestedAsyncLoggerConfigTest/inherit-level.xml
similarity index 100%
rename from log4j-core-test/src/test/resources/logger-config/AsyncLoggerConfig/inherit-level.xml
rename to log4j-async-logger/src/test/resources/org/apache/logging/log4j/async/logger/NestedAsyncLoggerConfigTest/inherit-level.xml
diff --git a/log4j-async-logger/src/test/resources/org/apache/logging/log4j/core/async/QueueFullAsyncLoggerConfigLoggingFromToStringTest.xml b/log4j-async-logger/src/test/resources/org/apache/logging/log4j/async/logger/QueueFullAsyncLoggerConfigLoggingFromToStringTest.xml
similarity index 100%
rename from log4j-async-logger/src/test/resources/org/apache/logging/log4j/core/async/QueueFullAsyncLoggerConfigLoggingFromToStringTest.xml
rename to log4j-async-logger/src/test/resources/org/apache/logging/log4j/async/logger/QueueFullAsyncLoggerConfigLoggingFromToStringTest.xml
diff --git a/log4j-async-logger/src/test/resources/org/apache/logging/log4j/core/async/QueueFullAsyncLoggerConfigTest.xml b/log4j-async-logger/src/test/resources/org/apache/logging/log4j/async/logger/QueueFullAsyncLoggerConfigTest.xml
similarity index 100%
rename from log4j-async-logger/src/test/resources/org/apache/logging/log4j/core/async/QueueFullAsyncLoggerConfigTest.xml
rename to log4j-async-logger/src/test/resources/org/apache/logging/log4j/async/logger/QueueFullAsyncLoggerConfigTest.xml
diff --git a/log4j-config-properties/src/test/java/org/apache/logging/log4j/config/properties/JavaPropsConfigurationFactoryTest.java b/log4j-config-properties/src/test/java/org/apache/logging/log4j/config/properties/JavaPropsConfigurationFactoryTest.java
index a02814efb6c..f1656be526f 100644
--- a/log4j-config-properties/src/test/java/org/apache/logging/log4j/config/properties/JavaPropsConfigurationFactoryTest.java
+++ b/log4j-config-properties/src/test/java/org/apache/logging/log4j/config/properties/JavaPropsConfigurationFactoryTest.java
@@ -23,9 +23,9 @@
import org.apache.logging.log4j.core.Appender;
import org.apache.logging.log4j.core.Filter;
import org.apache.logging.log4j.core.LoggerContext;
-import org.apache.logging.log4j.core.config.AbstractConfigurationFactoryTest;
import org.apache.logging.log4j.core.filter.ThresholdFilter;
import org.apache.logging.log4j.core.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.config.AbstractConfigurationFactoryTest;
import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
import org.apache.logging.log4j.test.junit.TempLoggingDir;
import org.junit.jupiter.api.Test;
diff --git a/log4j-config-yaml/src/test/java/org/apache/logging/log4j/config/yaml/YamlConfigurationFactoryTest.java b/log4j-config-yaml/src/test/java/org/apache/logging/log4j/config/yaml/YamlConfigurationFactoryTest.java
index 02d21323ab7..8e88f321e09 100644
--- a/log4j-config-yaml/src/test/java/org/apache/logging/log4j/config/yaml/YamlConfigurationFactoryTest.java
+++ b/log4j-config-yaml/src/test/java/org/apache/logging/log4j/config/yaml/YamlConfigurationFactoryTest.java
@@ -19,7 +19,7 @@
import java.io.IOException;
import java.nio.file.Path;
import org.apache.logging.log4j.core.LoggerContext;
-import org.apache.logging.log4j.core.config.AbstractConfigurationFactoryTest;
+import org.apache.logging.log4j.core.test.config.AbstractConfigurationFactoryTest;
import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
import org.apache.logging.log4j.test.junit.TempLoggingDir;
import org.junit.jupiter.api.Test;
diff --git a/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/LateConfigAbstractTest.java b/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/LateConfigAbstractTest.java
new file mode 100644
index 00000000000..f87bce912ea
--- /dev/null
+++ b/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/LateConfigAbstractTest.java
@@ -0,0 +1,56 @@
+/*
+ * 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.
+ */
+package org.apache.logging.log4j.core.test;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.jupiter.api.Assertions.assertSame;
+
+import java.net.URI;
+import java.nio.file.Path;
+import org.apache.logging.log4j.core.LoggerContext;
+import org.apache.logging.log4j.core.config.Configuration;
+import org.apache.logging.log4j.core.config.DefaultConfiguration;
+import org.apache.logging.log4j.core.config.xml.XmlConfiguration;
+import org.apache.logging.log4j.core.impl.Log4jContextFactory;
+
+public class LateConfigAbstractTest {
+
+ private static final String CONFIG = "LateConfigAbstractTest.xml";
+ // This class will be the caller of `Log4jContextFactory`
+ private static final String FQCN = Log4jContextFactory.class.getName();
+
+ protected static void testReconfiguration(final Log4jContextFactory factory, final Path loggingPath)
+ throws Exception {
+ try (final LoggerContext context = factory.getContext(FQCN, null, null, false)) {
+ final Configuration defaultConfig = context.getConfiguration();
+ assertThat(defaultConfig).isInstanceOf(DefaultConfiguration.class);
+
+ final URI configLocation =
+ LateConfigAbstractTest.class.getResource(CONFIG).toURI();
+ final LoggerContext context1 = factory.getContext(FQCN, null, null, false, configLocation, null);
+ assertThat(context1).isSameAs(context);
+ assertThat(loggingPath.resolve("test-xml.log")).exists();
+ final Configuration newConfig = context.getConfiguration();
+ assertThat(newConfig).isInstanceOf(XmlConfiguration.class);
+
+ final LoggerContext context2 = factory.getContext(FQCN, null, null, false);
+ assertThat(context2).isSameAs(context);
+ final Configuration sameConfig = context.getConfiguration();
+ assertSame(newConfig, sameConfig, "Configuration should not have been reset");
+ }
+ }
+}
diff --git a/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/async/QueueFullAbstractTest.java b/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/async/QueueFullAbstractTest.java
new file mode 100644
index 00000000000..4943de6314c
--- /dev/null
+++ b/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/async/QueueFullAbstractTest.java
@@ -0,0 +1,162 @@
+/*
+ * 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.
+ */
+package org.apache.logging.log4j.core.test.async;
+
+import static java.util.concurrent.TimeUnit.SECONDS;
+import static org.assertj.core.api.Assertions.assertThat;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.Stack;
+import java.util.concurrent.CountDownLatch;
+import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.core.Appender;
+import org.apache.logging.log4j.core.LogEvent;
+import org.apache.logging.log4j.core.LoggerContext;
+import org.apache.logging.log4j.core.appender.AsyncAppender;
+import org.apache.logging.log4j.core.config.Configuration;
+import org.apache.logging.log4j.core.config.LoggerConfig;
+import org.apache.logging.log4j.core.util.Constants;
+import org.apache.logging.log4j.status.StatusLogger;
+import org.apache.logging.log4j.test.junit.UsingStatusListener;
+import org.junit.jupiter.api.Tag;
+import org.junit.jupiter.api.Timeout;
+import org.junit.jupiter.api.Timeout.ThreadMode;
+
+/**
+ * Tests queue full scenarios abstract superclass.
+ */
+@Tag("async")
+@UsingStatusListener
+@Timeout(value = 5, unit = SECONDS, threadMode = ThreadMode.SEPARATE_THREAD)
+public abstract class QueueFullAbstractTest {
+ protected static boolean TRACE = Boolean.getBoolean(QueueFullAbstractTest.class.getSimpleName() + ".TRACE");
+ protected BlockingAppender blockingAppender;
+ protected Unlocker unlocker;
+
+ protected static final String APPENDER_NAME = "Blocking";
+ protected static final int BUFFER_COUNT = 128;
+ protected static final int MESSAGE_COUNT = BUFFER_COUNT + 2;
+ protected static final Logger LOGGER = StatusLogger.getLogger();
+
+ protected static class Unlocker extends Thread {
+
+ public final CountDownLatch countDownLatch;
+ final BlockingAppender blockingAppender;
+
+ public Unlocker(final CountDownLatch countDownLatch, final BlockingAppender blockingAppender) {
+ this.countDownLatch = countDownLatch;
+ this.blockingAppender = blockingAppender;
+ }
+
+ @Override
+ public void run() {
+ try {
+ countDownLatch.await();
+ LOGGER.info("Unlocker activated. Sleeping 500 millis before taking action...");
+ Thread.sleep(500);
+ } catch (final InterruptedException e) {
+ throw new RuntimeException(e);
+ }
+ LOGGER.info("Unlocker signalling BlockingAppender to proceed...");
+ blockingAppender.countDownLatch.countDown();
+ }
+ }
+
+ protected void testNormalQueueFullKeepsMessagesInOrder(
+ final LoggerContext ctx, final BlockingAppender blockingAppender) throws Exception {
+ checkConfig(ctx);
+ final Logger logger = ctx.getLogger(getClass());
+
+ blockingAppender.countDownLatch = new CountDownLatch(1);
+ final Unlocker unlocker = new Unlocker(new CountDownLatch(MESSAGE_COUNT - 1), blockingAppender);
+ unlocker.start();
+ asyncTest(logger, unlocker, blockingAppender);
+ unlocker.join();
+ }
+
+ protected abstract void checkConfig(final LoggerContext ctx) throws Exception;
+
+ protected void asyncTest(final Logger logger, final Unlocker unlocker, final BlockingAppender blockingAppender) {
+ for (int i = 0; i < MESSAGE_COUNT; i++) {
+ LOGGER.info(
+ "Test logging message {}. Ring buffer capacity was {}, countdown latch was {}.",
+ i,
+ asyncRemainingCapacity(logger),
+ unlocker.countDownLatch.getCount());
+ unlocker.countDownLatch.countDown();
+ final String param = "I'm innocent";
+ logger.info("Logging innocent object #{}: {}", i, param);
+ }
+ LOGGER.info(
+ "Waiting for message delivery: blockingAppender.logEvents.count={}.",
+ blockingAppender.logEvents.size());
+ while (blockingAppender.logEvents.size() < MESSAGE_COUNT) {
+ Thread.yield();
+ }
+ LOGGER.info(
+ "All {} message have been delivered: blockingAppender.logEvents.count={}.",
+ MESSAGE_COUNT,
+ blockingAppender.logEvents.size());
+
+ final Stack actual = transform(blockingAppender.logEvents);
+ for (int i = 0; i < MESSAGE_COUNT; i++) {
+ assertThat(actual.pop()).isEqualTo("Logging innocent object #%d: I'm innocent", i);
+ }
+ assertThat(actual).isEmpty();
+ }
+
+ static Stack transform(final List logEvents) {
+ final List filtered = getMessages(logEvents);
+ Collections.reverse(filtered);
+ final Stack result = new Stack<>();
+ result.addAll(filtered);
+ return result;
+ }
+
+ static List getMessages(final List logEvents) {
+ final List filtered = new ArrayList<>(logEvents.size());
+ for (LogEvent event : logEvents) {
+ filtered.add(event.getMessage().getFormattedMessage());
+ }
+ return filtered;
+ }
+
+ protected long asyncRemainingCapacity(final Logger logger) {
+ final LoggerConfig loggerConfig = ((org.apache.logging.log4j.core.Logger) logger).get();
+ final Appender async = loggerConfig.getAppenders().get("async");
+ if (async instanceof AsyncAppender) {
+ return ((AsyncAppender) async).getQueueCapacity();
+ }
+ throw new IllegalStateException("Neither Async Loggers nor AsyncAppender are configured");
+ }
+
+ protected static void assertAsyncAppender(final LoggerContext ctx) {
+ final Configuration config = ctx.getConfiguration();
+ assertThat(config).isNotNull();
+
+ final Collection appenders =
+ config.getRootLogger().getAppenders().values();
+ assertThat(appenders).hasSize(1).allMatch(AsyncAppender.class::isInstance);
+ }
+
+ protected static void assertFormatMessagesInBackground() {
+ assertThat(Constants.FORMAT_MESSAGES_IN_BACKGROUND).isTrue();
+ }
+}
diff --git a/log4j-core-test/src/main/java/org/apache/logging/log4j/core/config/AbstractConfigurationFactoryTest.java b/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/config/AbstractConfigurationFactoryTest.java
similarity index 97%
rename from log4j-core-test/src/main/java/org/apache/logging/log4j/core/config/AbstractConfigurationFactoryTest.java
rename to log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/config/AbstractConfigurationFactoryTest.java
index 52f8ff9ee3c..a0b3fc45ac8 100644
--- a/log4j-core-test/src/main/java/org/apache/logging/log4j/core/config/AbstractConfigurationFactoryTest.java
+++ b/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/config/AbstractConfigurationFactoryTest.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.logging.log4j.core.config;
+package org.apache.logging.log4j.core.test.config;
import static org.apache.logging.log4j.util.Unbox.box;
import static org.junit.jupiter.api.Assertions.assertAll;
@@ -35,6 +35,7 @@
import org.apache.logging.log4j.core.Logger;
import org.apache.logging.log4j.core.LoggerContext;
import org.apache.logging.log4j.core.appender.ConsoleAppender;
+import org.apache.logging.log4j.core.config.Configuration;
import org.apache.logging.log4j.core.filter.ThreadContextMapFilter;
import org.apache.logging.log4j.util.Strings;
diff --git a/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/config/AbstractNestedLoggerConfigTest.java b/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/config/AbstractNestedLoggerConfigTest.java
new file mode 100644
index 00000000000..4c0a3cbb5f5
--- /dev/null
+++ b/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/config/AbstractNestedLoggerConfigTest.java
@@ -0,0 +1,61 @@
+/*
+ * 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.
+ */
+package org.apache.logging.log4j.core.test.config;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import java.io.IOException;
+import java.io.InputStream;
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.core.LoggerContext;
+import org.apache.logging.log4j.core.config.Configuration;
+import org.apache.logging.log4j.core.config.ConfigurationSource;
+import org.apache.logging.log4j.core.config.xml.XmlConfiguration;
+import org.junit.jupiter.api.Test;
+
+public abstract class AbstractNestedLoggerConfigTest {
+
+ @Test
+ public void testInheritParentDefaultLevel() throws IOException {
+ final Configuration configuration = loadConfiguration("/default-level.xml");
+ try {
+ assertEquals(Level.ERROR, configuration.getLoggerConfig("com.foo").getLevel());
+ } finally {
+ configuration.stop();
+ }
+ }
+
+ @Test
+ public void testInheritParentLevel() throws IOException {
+ final Configuration configuration = loadConfiguration("/inherit-level.xml");
+ try {
+ assertEquals(Level.TRACE, configuration.getLoggerConfig("com.foo").getLevel());
+ } finally {
+ configuration.stop();
+ }
+ }
+
+ private Configuration loadConfiguration(final String resourcePath) throws IOException {
+ try (final InputStream in = getClass().getResourceAsStream(getClass().getSimpleName() + resourcePath)) {
+ final Configuration configuration =
+ new XmlConfiguration(new LoggerContext("test"), new ConfigurationSource(in));
+ configuration.initialize();
+ configuration.start();
+ return configuration;
+ }
+ }
+}
diff --git a/log4j-core-test/src/test/resources/RandomAccessFileAppenderLocationTest.xml b/log4j-core-test/src/main/resources/org/apache/logging/log4j/core/test/LateConfigAbstractTest.xml
similarity index 50%
rename from log4j-core-test/src/test/resources/RandomAccessFileAppenderLocationTest.xml
rename to log4j-core-test/src/main/resources/org/apache/logging/log4j/core/test/LateConfigAbstractTest.xml
index 38a76f0a89a..8233fbf38bb 100644
--- a/log4j-core-test/src/test/resources/RandomAccessFileAppenderLocationTest.xml
+++ b/log4j-core-test/src/main/resources/org/apache/logging/log4j/core/test/LateConfigAbstractTest.xml
@@ -15,21 +15,43 @@
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
-
+
+
+ ${test:logging.path}/test-xml.log
+
+
+
-
+
+
+
+
- %d %p %c{1.} [%t] %X{aKey} %m %location %ex%n
-
+ %d %p %C{1.} [%t] %m%n
-
+
+
+
+
+
+
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/log4j-core-test/src/main/resources/org/apache/logging/log4j/core/async/QueueFullAbstractTest.xml b/log4j-core-test/src/main/resources/org/apache/logging/log4j/core/test/async/QueueFullAbstractTest.xml
similarity index 100%
rename from log4j-core-test/src/main/resources/org/apache/logging/log4j/core/async/QueueFullAbstractTest.xml
rename to log4j-core-test/src/main/resources/org/apache/logging/log4j/core/test/async/QueueFullAbstractTest.xml
diff --git a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/LateConfigTest.java b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/LateConfigTest.java
index 3263ed6f254..ab3a8f8fa66 100644
--- a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/LateConfigTest.java
+++ b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/LateConfigTest.java
@@ -16,34 +16,24 @@
*/
package org.apache.logging.log4j.core;
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.junit.jupiter.api.Assertions.assertSame;
-
-import java.net.URI;
import java.nio.file.Path;
import java.util.stream.Stream;
-import org.apache.logging.log4j.core.async.AsyncLoggerContextSelector;
-import org.apache.logging.log4j.core.async.BasicAsyncLoggerContextSelector;
-import org.apache.logging.log4j.core.config.Configuration;
-import org.apache.logging.log4j.core.config.DefaultConfiguration;
-import org.apache.logging.log4j.core.config.xml.XmlConfiguration;
import org.apache.logging.log4j.core.impl.Log4jContextFactory;
import org.apache.logging.log4j.core.selector.BasicContextSelector;
import org.apache.logging.log4j.core.selector.ClassLoaderContextSelector;
import org.apache.logging.log4j.core.selector.ContextSelector;
+import org.apache.logging.log4j.core.test.LateConfigAbstractTest;
import org.apache.logging.log4j.plugins.di.ConfigurableInstanceFactory;
import org.apache.logging.log4j.plugins.di.DI;
import org.apache.logging.log4j.test.junit.TempLoggingDir;
+import org.apache.logging.log4j.test.junit.UsingStatusListener;
import org.junit.jupiter.api.Tag;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.MethodSource;
@Tag("functional")
-public class LateConfigTest {
-
- private static final String CONFIG = "/log4j-test1.xml";
- // This class will be the caller of `Log4jContextFactory`
- private static final String FQCN = Log4jContextFactory.class.getName();
+@UsingStatusListener
+public class LateConfigTest extends LateConfigAbstractTest {
@TempLoggingDir
private static Path loggingPath;
@@ -52,30 +42,13 @@ static Stream selectors() {
final ConfigurableInstanceFactory instanceFactory = DI.createInitializedFactory();
return Stream.of(
new ClassLoaderContextSelector(instanceFactory.newChildInstanceFactory()),
- new BasicContextSelector(instanceFactory.newChildInstanceFactory()),
- new AsyncLoggerContextSelector(instanceFactory.newChildInstanceFactory()),
- new BasicAsyncLoggerContextSelector(instanceFactory.newChildInstanceFactory()))
+ new BasicContextSelector(instanceFactory.newChildInstanceFactory()))
.map(Log4jContextFactory::new);
}
@ParameterizedTest(name = "reconfigure {0}")
@MethodSource("selectors")
- public void testReconfiguration(final Log4jContextFactory factory) throws Exception {
- try (final LoggerContext context = factory.getContext(FQCN, null, null, false)) {
- final Configuration defaultConfig = context.getConfiguration();
- assertThat(defaultConfig).isInstanceOf(DefaultConfiguration.class);
-
- final URI configLocation = LateConfigTest.class.getResource(CONFIG).toURI();
- final LoggerContext context1 = factory.getContext(FQCN, null, null, false, configLocation, null);
- assertThat(context1).isSameAs(context);
- assertThat(loggingPath.resolve("test-xml.log")).exists();
- final Configuration newConfig = context.getConfiguration();
- assertThat(newConfig).isInstanceOf(XmlConfiguration.class);
-
- final LoggerContext context2 = factory.getContext(FQCN, null, null, false);
- assertThat(context2).isSameAs(context);
- final Configuration sameConfig = context.getConfiguration();
- assertSame(newConfig, sameConfig, "Configuration should not have been reset");
- }
+ void reconfiguration(final Log4jContextFactory factory) throws Exception {
+ testReconfiguration(factory, loggingPath);
}
}
diff --git a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/RandomAccessFileAppenderTest.java b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/RandomAccessFileAppenderTest.java
index 1266ff78043..6b0292f74db 100644
--- a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/RandomAccessFileAppenderTest.java
+++ b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/RandomAccessFileAppenderTest.java
@@ -16,75 +16,38 @@
*/
package org.apache.logging.log4j.core.appender;
-import static org.hamcrest.CoreMatchers.containsString;
-import static org.hamcrest.CoreMatchers.not;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertThat;
+import static org.assertj.core.api.Assertions.assertThat;
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileReader;
-import java.util.Arrays;
-import java.util.Collection;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.List;
import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
-import org.apache.logging.log4j.test.junit.CleanFiles;
-import org.hamcrest.Matcher;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.RuleChain;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
+import org.apache.logging.log4j.core.LoggerContext;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
+import org.apache.logging.log4j.test.junit.TempLoggingDir;
+import org.junit.jupiter.api.Test;
/**
* Simple tests for both the RandomAccessFileAppender and RollingRandomAccessFileAppender.
*/
-@RunWith(Parameterized.class)
public class RandomAccessFileAppenderTest {
- @Parameterized.Parameters(name = "{0}, locationEnabled={1}, type={2}")
- public static Collection