diff --git a/build/parent/pom.xml b/build/parent/pom.xml
index 5001f670631..84e60f5991c 100644
--- a/build/parent/pom.xml
+++ b/build/parent/pom.xml
@@ -439,53 +439,11 @@
- org.slf4j
- jul-to-slf4j
- ${slf4j.version}
+ org.axonframework
+ axon-test-logging
+ ${project.version}
test
-
- org.apache.logging.log4j
- log4j-slf4j2-impl
- ${log4j.version}
- test
-
-
- org.slf4j
- jcl-over-slf4j
- ${slf4j.version}
- test
-
-
- org.apache.logging.log4j
- log4j-core-test
- 2.26.1
- test
-
-
- org.apache.logging.log4j
- log4j-core
- ${log4j.version}
- test
-
-
- com.sun.jdmk
- jmxtools
-
-
- com.sun.jmx
- jmxri
-
-
- javax.mail
- mail
-
-
- javax.jms
- jms
-
-
-
diff --git a/eventsourcing/src/test/resources/log4j2.properties b/eventsourcing/src/test/resources/log4j2.properties
deleted file mode 100644
index 76dd9f2c091..00000000000
--- a/eventsourcing/src/test/resources/log4j2.properties
+++ /dev/null
@@ -1,52 +0,0 @@
-#
-# Copyright (c) 2010-2026. Axon Framework
-#
-# Licensed 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.
-#
-
-name=AxonTestConfiguration
-
-appender.console.type = Console
-appender.console.name = STDOUT
-appender.console.layout.type = PatternLayout
-appender.console.layout.pattern = %d [%t] %-5p %-30.30c{1} %x - %m%n
-
-rootLogger.level = info
-rootLogger.appenderRefs = stdout
-rootLogger.appenderRef.stdout.ref=STDOUT
-# Main
-logger.axon.name = org.axonframework
-logger.axon.level = INFO
-logger.axon.additivity=false
-logger.axon.appenderRefs=stdout
-logger.axon.appenderRef.stdout.ref=STDOUT
-# Messaging
-logger.chaining-converter.name = org.axonframework.serialization.ChainingConverter
-logger.chaining-converter.level = OFF
-logger.logging-callback.name = org.axonframework.commandhandling.callbacks.LoggingCallback
-logger.logging-callback.level = ERROR
-# Event Sourcing
-logger.abstract-eventstore.name = org.axonframework.eventsourcing.eventstore.AbstractLegacyEventStore
-logger.abstract-eventstore.level = ERROR
-logger.abstract-snapshotter.name = org.axonframework.messaging.snapshotting.eventsourcing.AbstractSnapshotter
-logger.abstract-snapshotter.level = ERROR
-# Storage
-logger.hibernate.name = org.hibernate
-logger.hibernate.level = ERROR
-# Test Containers
-logger.testcontainers.name = org.testcontainers
-logger.testcontainers.level = WARN
-logger.docker-java.name = com.github.dockerjava
-logger.docker-java.level = WARN
-logger.docker-java-http5.name = com.github.dockerjava.zerodep.shaded.org.apache.hc.client5.http.wire
-logger.docker-java-http5.level = OFF
diff --git a/extensions/metrics/metrics-dropwizard/src/test/resources/log4j2.properties b/extensions/metrics/metrics-dropwizard/src/test/resources/log4j2.properties
deleted file mode 100644
index 2b7ca51743a..00000000000
--- a/extensions/metrics/metrics-dropwizard/src/test/resources/log4j2.properties
+++ /dev/null
@@ -1,36 +0,0 @@
-#
-# Copyright (c) 2010-2026. Axon Framework
-#
-# Licensed 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.
-#
-
-name=AxonTestConfiguration
-appenders = console
-
-appender.console.type = Console
-appender.console.name = STDOUT
-appender.console.layout.type = PatternLayout
-appender.console.layout.pattern = %d [%t] %-5p %-30.30c{1} %x - %m%n
-
-rootLogger.level = info
-rootLogger.appenderRefs = stdout
-rootLogger.appenderRef.stdout.ref = STDOUT
-# Main
-logger.axon.name = org.axonframework
-logger.axon.level = info
-logger.axon.additivity = false
-logger.axon.appenderRefs = stdout
-logger.axon.appenderRef.stdout.ref = STDOUT
-# Logging
-logger.metric-registry.name = org.axonframework.extension.metrics.dropwizard.GlobalMetricRegistry
-logger.metric-registry.level = ERROR
\ No newline at end of file
diff --git a/extensions/metrics/metrics-micrometer/src/test/resources/log4j2.properties b/extensions/metrics/metrics-micrometer/src/test/resources/log4j2.properties
deleted file mode 100644
index 991c3410f27..00000000000
--- a/extensions/metrics/metrics-micrometer/src/test/resources/log4j2.properties
+++ /dev/null
@@ -1,36 +0,0 @@
-#
-# Copyright (c) 2010-2026. Axon Framework
-#
-# Licensed 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.
-#
-
-name=AxonTestConfiguration
-appenders = console
-
-appender.console.type = Console
-appender.console.name = STDOUT
-appender.console.layout.type = PatternLayout
-appender.console.layout.pattern = %d [%t] %-5p %-30.30c{1} %x - %m%n
-
-rootLogger.level = info
-rootLogger.appenderRefs = stdout
-rootLogger.appenderRef.stdout.ref = STDOUT
-# Main
-logger.axon.name = org.axonframework
-logger.axon.level = info
-logger.axon.additivity = false
-logger.axon.appenderRefs = stdout
-logger.axon.appenderRef.stdout.ref = STDOUT
-# Logging
-logger.metric-registry.name = org.axonframework.extension.metrics.micrometer.GlobalMetricRegistry
-logger.metric-registry.level = ERROR
\ No newline at end of file
diff --git a/extensions/spring/spring-boot-autoconfigure/src/test/resources/log4j2.properties b/extensions/spring/spring-boot-autoconfigure/src/test/resources/log4j2.properties
deleted file mode 100644
index 290f1a32d91..00000000000
--- a/extensions/spring/spring-boot-autoconfigure/src/test/resources/log4j2.properties
+++ /dev/null
@@ -1,82 +0,0 @@
-#
-# Copyright (c) 2010-2026. Axon Framework
-#
-# Licensed 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.
-#
-
-name=AxonTestConfiguration
-appenders = console
-
-appender.console.type = Console
-appender.console.name = STDOUT
-appender.console.layout.type = PatternLayout
-appender.console.layout.pattern = %d [%t] %-5p %-30.30c{1} %x - %m%n
-
-rootLogger.level = INFO
-rootLogger.appenderRefs = stdout
-rootLogger.appenderRef.stdout.ref = STDOUT
-# Main
-logger.axon.name = org.axonframework
-logger.axon.level = INFO
-logger.axon.additivity = false
-logger.axon.appenderRefs = stdout
-logger.axon.appenderRef.stdout.ref = STDOUT
-# Messaging
-logger.chaining-converter.name = org.axonframework.serialization.ChainingConverter
-logger.chaining-converter.level = OFF
-# Events
-logger.pooled-streaming-event-processor.name = org.axonframework.eventhandling.pooled
-logger.pooled-streaming-event-processor.level = WARN
-logger.tracking-event-processor.name = org.axonframework.eventhandling.TrackingEventProcessor
-logger.tracking-event-processor.level = WARN
-logger.work-package.name = org.axonframework.eventhandling.pooled.WorkPackage
-logger.work-package.level = ERROR
-# Axon Framework - Spring Boot
-logger.axon-spring-boot-auto-config.name = org.axonframework.springboot.autoconfig
-logger.axon-spring-boot-auto-config.level = WARN
-logger.axon-spring-boot-util.name = org.axonframework.springboot.util
-logger.axon-spring-boot-util.level = ERROR
-logger.saga-customize-integration-test.name = org.axonframework.springboot.SagaCustomizeIntegrationTest
-logger.saga-customize-integration-test.level = WARN
-# AxonIQConsoleModule
-logger.axoniq-console.name=org.axonframework.config.AxonIQConsoleModule
-logger.axoniq-console.level=WARN
-# Storage
-logger.hibernate.name = org.hibernate
-logger.hibernate.level = WARN
-logger.hibernate-sql-exception-helper.name = org.hibernate.engine.jdbc.spi.SqlExceptionHelper
-logger.hibernate-sql-exception-helper.level = ERROR
-logger.hikari.name = com.zaxxer.hikari
-logger.hikari.level = WARN
-logger.hikari-util.name = com.zaxxer.hikari.util
-logger.hikari-util.level = ERROR
-# Spring
-logger.annotation-mbean-exporter.name = org.springframework.jmx.export.annotation.AnnotationMBeanExporter
-logger.annotation-mbean-exporter.level = WARN
-logger.annotation-config-application-context.name = org.springframework.context.annotation.AnnotationConfigApplicationContext
-logger.annotation-config-application-context.level = WARN
-logger.spring-boot-test.name = org.springframework.boot.test
-logger.spring-boot-test.level = WARN
-logger.spring-context-annotation.name = org.springframework.context.annotation
-logger.spring-context-annotation.level = WARN
-logger.spring-context-support.name = org.springframework.context.support
-logger.spring-context-support.level = WARN
-logger.spring-data-repo-config.name = org.springframework.data.repository.config
-logger.spring-data-repo-config.level = WARN
-logger.spring-orm.name = org.springframework.orm
-logger.spring-orm.level = WARN
-logger.spring-test.name = org.springframework.test
-logger.spring-test.level = WARN
-# Token store
-logger.in-memory-token-store.name=org.axonframework.messaging.inmemory.store.token.streaming.processors.eventhandling.InMemoryTokenStore
-logger.in-memory-token-store.level = ERROR
\ No newline at end of file
diff --git a/extensions/spring/spring/src/test/resources/log4j2.properties b/extensions/spring/spring/src/test/resources/log4j2.properties
deleted file mode 100644
index 99f5d2e96d5..00000000000
--- a/extensions/spring/spring/src/test/resources/log4j2.properties
+++ /dev/null
@@ -1,79 +0,0 @@
-#
-# Copyright (c) 2010-2026. Axon Framework
-#
-# Licensed 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.
-#
-
-name=AxonTestConfiguration
-appenders = console
-
-appender.console.type = Console
-appender.console.name = STDOUT
-appender.console.layout.type = PatternLayout
-appender.console.layout.pattern = %d [%t] %-5p %-30.30c{1} %x - %m%n
-
-rootLogger.level = info
-rootLogger.appenderRefs = stdout
-rootLogger.appenderRef.stdout.ref = STDOUT
-# Main
-logger.axon.name = org.axonframework
-logger.axon.level = INFO
-logger.axon.additivity = false
-logger.axon.appenderRefs = stdout
-logger.axon.appenderRef.stdout.ref = STDOUT
-# Messaging
-logger.chaining-converter.name = org.axonframework.serialization.ChainingConverter
-logger.chaining-converter.level = OFF
-# Events
-logger.abstract-snapshotter.name = org.axonframework.messaging.snapshotting.eventsourcing.AbstractSnapshotter
-logger.abstract-snapshotter.level = ERROR
-logger.pooled-streaming-event-processor.name = org.axonframework.eventhandling.pooled
-logger.pooled-streaming-event-processor.level = WARN
-logger.tracking-event-processor.name = org.axonframework.eventhandling.TrackingEventProcessor
-logger.tracking-event-processor.level = WARN
-# Dead letters
-logger.dead-letter-processing-task.name = org.axonframework.messaging.deadletter.eventhandling.DeadLetteredEventProcessingTask
-logger.dead-letter-processing-task.level = ERROR
-logger.dead-letter-queue.name = org.axonframework.messaging.deadletter
-logger.dead-letter-queue.level = WARN
-logger.jpa-dead-letter-queue.name = org.axonframework.eventhandling.deadletter
-logger.jpa-dead-letter-queue.level = WARN
-# Axon Spring
-logger.spring-axon-auto-configurer.name = org.axonframework.extension.spring.config.SpringAxonAutoConfigurer
-logger.spring-axon-auto-configurer.level = ERROR
-logger.spring-bean-parameter-resolver.name = org.axonframework.extension.spring.config.annotation.SpringBeanParameterResolverFactory
-logger.spring-bean-parameter-resolver.level = ERROR
-# Spring
-logger.spring-context-annotation.name = org.springframework.context.annotation
-logger.spring-context-annotation.level = WARN
-logger.spring-context-support.name = org.springframework.context.support
-logger.spring-context-support.level = WARN
-logger.spring-orm.name = org.springframework.orm
-logger.spring-orm.level = WARN
-logger.spring-test.name = org.springframework.test
-logger.spring-test.level = WARN
-# Storage
-logger.hibernate.name = org.hibernate
-logger.hibernate.level = WARN
-logger.mchange-v2.name = com.mchange.v2
-logger.mchange-v2.level = WARN
-# Test Containers
-logger.testcontainers.name = org.testcontainers
-logger.testcontainers.level = WARN
-logger.docker-java.name = com.github.dockerjava
-logger.docker-java.level = WARN
-logger.docker-java-http5.name = com.github.dockerjava.zerodep.shaded.org.apache.hc.client5.http.wire
-logger.docker-java-http5.level = OFF
-# Token store
-logger.in-memory-token-store.name=org.axonframework.messaging.eventhandling.processors.streaming.token.store.inmemory.InMemoryTokenStore
-logger.in-memory-token-store.level = ERROR
\ No newline at end of file
diff --git a/integrationtests/src/test/resources/log4j2.properties b/integrationtests/src/test/resources/log4j2.properties
deleted file mode 100644
index a9fbaf74084..00000000000
--- a/integrationtests/src/test/resources/log4j2.properties
+++ /dev/null
@@ -1,85 +0,0 @@
-#
-# Copyright (c) 2010-2026. Axon Framework
-#
-# Licensed 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.
-#
-
-name=AxonTestConfiguration
-appenders = console
-
-appender.console.type = Console
-appender.console.name = STDOUT
-appender.console.layout.type = PatternLayout
-appender.console.layout.pattern = %d [%t] %-5p %-30.30c{1} %x - %m%n
-
-rootLogger.level = info
-rootLogger.appenderRefs = stdout
-rootLogger.appenderRef.stdout.ref = STDOUT
-#Main
-logger.axon.name = org.axonframework
-logger.axon.level = INFO
-logger.axon.additivity = false
-logger.axon.appenderRefs = stdout
-logger.axon.appenderRef.stdout.ref = STDOUT
-# Messaging
-logger.chaining-converter.name = org.axonframework.serialization.ChainingConverter
-logger.chaining-converter.level = OFF
-# Commands
-logger.retry-scheduler.name = org.axonframework.commandhandling.gateway
-logger.retry-scheduler.level = WARN
-# Events
-logger.abstract-eventstore.name = org.axonframework.eventsourcing.eventstore.AbstractLegacyEventStore
-logger.abstract-eventstore.level = ERROR
-logger.tracking-event-processor.name = org.axonframework.eventhandling.TrackingEventProcessor
-logger.tracking-event-processor.level = OFF
-# Queries
-logger.simple-query-update-emitter.name = org.axonframework.messaging.queryhandling.SimpleQueryUpdateEmitter
-logger.simple-query-update-emitter.level = OFF
-# Deadlines
-logger.simple-deadline-manager.name = org.axonframework.deadline.SimpleDeadlineManager
-logger.simple-deadline-manager.level = OFF
-# AxonIQConsoleModule
-logger.axoniq-console.name=org.axonframework.config.AxonIQConsoleModule
-logger.axoniq-console.level=WARN
-# Storage
-logger.hibernate.name = org.hibernate
-logger.hibernate.level = ERROR
-logger.mchange-v2.name = com.mchange.v2
-logger.mchange-v2.level = WARN
-# Spring
-logger.spring-context-support.name = org.springframework.context.support
-logger.spring-context-support.level = WARN
-logger.spring-orm.name = org.springframework.orm
-logger.spring-orm.level = WARN
-logger.spring-test.name = org.springframework.test
-logger.spring-test.level = WARN
-# Scheduling
-logger.jobrunr.name = org.jobrunr.server
-logger.jobrunr.level = WARN
-logger.quartz.name = org.quartz
-logger.quartz.level = WARN
-logger.quartz-job.name = org.axonframework.deadline.quartz.DeadlineJob
-logger.quartz-job.level = OFF
-# Test Containers
-logger.testcontainers.name=org.testcontainers
-logger.testcontainers.level=WARN
-logger.docker-java.name=com.github.dockerjava
-logger.docker-java.level=WARN
-logger.docker-java-http5.name=com.github.dockerjava.zerodep.shaded.org.apache.hc.client5.http.wire
-logger.docker-java-http5.level=OFF
-# Token store
-logger.in-memory-token-store.name=org.axonframework.messaging.eventhandling.processors.streaming.token.store.inmemory.InMemoryTokenStore
-logger.in-memory-token-store.level=ERROR
-# Ehcache
-logger.ehcache.name=org.ehcache
-logger.ehcache.level=WARN
\ No newline at end of file
diff --git a/integrationtests/src/test/resources/log4j2_silenced.properties b/integrationtests/src/test/resources/log4j2_silenced.properties
deleted file mode 100644
index d329fb301c8..00000000000
--- a/integrationtests/src/test/resources/log4j2_silenced.properties
+++ /dev/null
@@ -1,33 +0,0 @@
-#
-# Copyright (c) 2010-2026. Axon Framework
-#
-# Licensed 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.
-#
-
-name=AxonTestConfiguration
-appenders = console
-
-appender.console.type = Console
-appender.console.name = STDOUT
-appender.console.layout.type = PatternLayout
-appender.console.layout.pattern = %d [%t] %-5p %-30.30c{1} %x - %m%n
-
-rootLogger.level = warn
-rootLogger.appenderRefs = stdout
-rootLogger.appenderRef.stdout.ref = STDOUT
-
-logger.axon.name = org.axonframework
-logger.axon.level = warn
-logger.axon.additivity = false
-logger.axon.appenderRefs = stdout
-logger.axon.appenderRef.stdout.ref = STDOUT
diff --git a/messaging/src/test/resources/log4j2.properties b/messaging/src/test/resources/log4j2.properties
deleted file mode 100644
index 6e30178304f..00000000000
--- a/messaging/src/test/resources/log4j2.properties
+++ /dev/null
@@ -1,94 +0,0 @@
-#
-# Copyright (c) 2010-2026. Axon Framework
-#
-# Licensed 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.
-#
-
-name=AxonTestConfiguration
-appenders = console
-
-appender.console.type = Console
-appender.console.name = STDOUT
-appender.console.layout.type = PatternLayout
-appender.console.layout.pattern = %d [%t] %-5p %-30.30c{1} %x - %m%n
-
-rootLogger.level = info
-rootLogger.appenderRefs = stdout
-rootLogger.appenderRef.stdout.ref = STDOUT
-# Main
-logger.axon.name = org.axonframework
-logger.axon.level = INFO
-logger.axon.additivity = false
-logger.axon.appenderRefs = stdout
-logger.axon.appenderRef.stdout.ref = STDOUT
-# Messaging
-logger.abstract-unit-of-work.name = org.axonframework.messaging.core.unitofwork.AbstractLegacyUnitOfWork
-logger.abstract-unit-of-work.level = ERROR
-logger.message-processing-context.name = org.axonframework.messaging.core.unitofwork.MessageProcessingContext
-logger.message-processing-context.level = WARN
-logger.shutdown-latch.name = org.axonframework.common.lifecycle.ShutdownLatch
-logger.shutdown-latch.level = ERROR
-logger.tracing.name = org.axonframework.tracing
-logger.tracing.level = INFO
-# Commands
-logger.command-handler-resolution.name = org.axonframework.messaging.commandhandling.LoggingDuplicateCommandHandlerResolver
-logger.command-handler-resolution.level = ERROR
-logger.default-command-gateway.name = org.axonframework.messaging.commandhandling.gateway.DefaultCommandGateway
-logger.default-command-gateway.level = ERROR
-logger.logging-callback.name = org.axonframework.messaging.commandhandling.callbacks.LoggingCallback
-logger.logging-callback.level = WARN
-logger.retry-scheduler.name = org.axonframework.messaging.commandhandling.gateway
-logger.retry-scheduler.level = WARN
-# Events
-logger.simple-event-bus.name = org.axonframework.messaging.eventhandling.SimpleEventBus
-logger.simple-event-bus.level = WARN
-logger.pooled-streaming-event-processor.name = org.axonframework.messaging.eventhandling.pooled
-logger.pooled-streaming-event-processor.level = ERROR
-# Queries
-logger.query-handler-resolution.name = org.axonframework.messaging.queryhandling.registration.LoggingDuplicateQueryHandlerResolver
-logger.query-handler-resolution.level = ERROR
-# Dead letters
-logger.dead-letter-processing-task.name = org.axonframework.messaging.eventhandling.deadletter.DeadLetteredEventProcessingTask
-logger.dead-letter-processing-task.level = ERROR
-logger.dead-letter-queue.name = org.axonframework.messaging.deadletter
-logger.dead-letter-queue.level = WARN
-logger.jpa-dead-letter-queue.name = org.axonframework.messaging.eventhandling.deadletter.jpa
-logger.jpa-dead-letter-queue.level = WARN
-logger.legacy-jpa-dead-letter-queue.name = org.axonframework.messaging.eventhandling.deadletter.legacyjpa
-logger.legacy-jpa-dead-letter-queue.level = WARN
-logger.jdbc-dead-letter-queue.name = org.axonframework.messaging.eventhandling.deadletter.jdbc
-logger.jdbc-dead-letter-queue.level = WARN
-# Tracing
-logger.logging-tracer.name = org.axonframework.messaging.tracing.LoggingSpanFactory
-logger.logging-tracer.level = WARN
-# Storage
-logger.hibernate.name = org.hibernate
-logger.hibernate.level = WARN
-logger.hibernate-sql-exception-helper.name = org.hibernate.engine.jdbc.spi.SqlExceptionHelper
-logger.hibernate-sql-exception-helper.level = ERROR
-# Spring
-logger.spring-orm.name = org.springframework.orm
-logger.spring-orm.level = WARN
-logger.spring-test.name = org.springframework.test
-logger.spring-test.level = WARN
-# Scheduling
-logger.jobrunr.name = org.jobrunr.server
-logger.jobrunr.level = WARN
-logger.quartz.name = org.quartz
-logger.quartz.level = WARN
-logger.quartz-job.name = org.axonframework.messaging.eventhandling.scheduling.quartz.FireEventJob
-logger.quartz-job.level = OFF
-# Token store
-logger.in-memory-token-store.name=org.axonframework.messaging.eventhandling.processors.streaming.token.store.inmemory.InMemoryTokenStore
-logger.in-memory-token-store.level = ERROR
-
diff --git a/modelling/src/test/resources/log4j2.properties b/modelling/src/test/resources/log4j2.properties
deleted file mode 100644
index 9582f11ca31..00000000000
--- a/modelling/src/test/resources/log4j2.properties
+++ /dev/null
@@ -1,55 +0,0 @@
-#
-# Copyright (c) 2010-2026. Axon Framework
-#
-# Licensed 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.
-#
-
-name=AxonTestConfiguration
-appenders = console
-
-appender.console.type = Console
-appender.console.name = STDOUT
-appender.console.layout.type = PatternLayout
-appender.console.layout.pattern = %d [%t] %-5p %-30.30c{1} %x - %m%n
-
-rootLogger.level = info
-rootLogger.appenderRefs = stdout
-rootLogger.appenderRef.stdout.ref = STDOUT
-# Main
-logger.axon.name = org.axonframework
-logger.axon.level = INFO
-logger.axon.additivity = false
-logger.axon.appenderRefs = stdout
-logger.axon.appenderRef.stdout.ref = STDOUT
-# Messaging
-logger.chaining-converter.name = org.axonframework.serialization.ChainingConverter
-logger.chaining-converter.level = OFF
-logger.logging-callback.name = org.axonframework.commandhandling.callbacks.LoggingCallback
-logger.logging-callback.level = ERROR
-# Sagas
-logger.jdbc-saga-store.name = org.axonframework.modelling.saga.repository.jdbc.JdbcSagaStore
-logger.jdbc-saga-store.level = ERROR
-# Storage
-logger.hibernate.name = org.hibernate
-logger.hibernate.level = WARN
-# Caching
-logger.ehcache-configuration-factory.name = org.ehcache.config.ConfigurationFactory
-logger.ehcache-configuration-factory.level = ERROR
-# Spring
-logger.spring-orm.name = org.springframework.orm
-logger.spring-orm.level = WARN
-logger.spring-test.name = org.springframework.test
-logger.spring-test.level = WARN
-# Token store
-logger.in-memory-token-store.name = org.axonframework.messaging.inmemory.store.token.streaming.processors.eventhandling.InMemoryTokenStore
-logger.in-memory-token-store.level = ERROR
diff --git a/pom.xml b/pom.xml
index 5e7fed38169..4c44d133722 100644
--- a/pom.xml
+++ b/pom.xml
@@ -34,6 +34,7 @@
migration
modelling
test
+ test-logging
update
integrationtests
diff --git a/test-logging/pom.xml b/test-logging/pom.xml
new file mode 100644
index 00000000000..ec1c90afec7
--- /dev/null
+++ b/test-logging/pom.xml
@@ -0,0 +1,104 @@
+
+
+
+
+ 4.0.0
+
+
+ org.axonframework
+ axon
+ ${revision}
+ ../pom.xml
+
+
+ axon-test-logging
+
+ Axon Framework - Test Logging Defaults
+
+ Provides the default Log4j2 test logging configuration shared by all Axon Framework modules, so that CI
+ and local test runs get a consistent, low-noise log output without every module having to duplicate it.
+
+
+
+
+ 2.26.1
+ 2.0.18
+
+
+
+
+
+ org.slf4j
+ jul-to-slf4j
+ ${slf4j.version}
+
+
+ org.apache.logging.log4j
+ log4j-slf4j2-impl
+ ${log4j.version}
+
+
+ org.slf4j
+ jcl-over-slf4j
+ ${slf4j.version}
+
+
+ org.apache.logging.log4j
+ log4j-core-test
+ ${log4j.version}
+
+
+
+ org.springframework
+ spring-test
+
+
+
+
+ org.apache.logging.log4j
+ log4j-core
+ ${log4j.version}
+
+
+ com.sun.jdmk
+ jmxtools
+
+
+ com.sun.jmx
+ jmxri
+
+
+ javax.mail
+ mail
+
+
+ javax.jms
+ jms
+
+
+
+
+
+
diff --git a/test-logging/src/main/resources/log4j2-test.properties b/test-logging/src/main/resources/log4j2-test.properties
new file mode 100644
index 00000000000..51a499343ad
--- /dev/null
+++ b/test-logging/src/main/resources/log4j2-test.properties
@@ -0,0 +1,75 @@
+#
+# Copyright (c) 2010-2026. Axon Framework
+#
+# Licensed 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.
+#
+
+# Default test logging configuration for all Axon Framework modules.
+#
+# Named "log4j2-test.properties" (rather than "log4j2.properties") so it takes
+# precedence, per Log4j2's ConfigurationFactory search order, over any
+# "log4j2.properties" that might still be bundled in another module's test-jar.
+#
+# Policy: dependencies default to ERROR, Axon Framework code defaults to WARN,
+# with specific known-noisy loggers pinned to ERROR/OFF, and specific loggers
+# that tests rely on capturing at a finer level pinned back up.
+#
+# This replaces 9 separate, drifted log4j2.properties files that used to live
+# in messaging, modelling, eventsourcing, test, integrationtests, and four
+# extension modules. Several of their per-class overrides referenced classes
+# that no longer exist (renamed or removed over the course of the Axon 5
+# refactor) and were silently doing nothing; those were dropped rather than
+# carried forward. Only overrides verified against current source were kept.
+
+name=AxonTestConfiguration
+
+appender.console.type = Console
+appender.console.name = STDOUT
+appender.console.layout.type = PatternLayout
+appender.console.layout.pattern = %d{HH:mm:ss.SSS} [%t] %-5level %-30.30logger{1} - %msg%n
+
+# Dependencies default to ERROR
+rootLogger.level = ERROR
+rootLogger.appenderRefs = stdout
+rootLogger.appenderRef.stdout.ref = STDOUT
+
+# Axon Framework code defaults to WARN
+logger.axon.name = org.axonframework
+logger.axon.level = WARN
+logger.axon.additivity = false
+logger.axon.appenderRefs = stdout
+logger.axon.appenderRef.stdout.ref = STDOUT
+
+# SnapshottingEntityLifecycleHandlerTest(Suite) attach a ListAppender to this
+# logger and assert on its INFO-level messages; the WARN default above would
+# otherwise filter them out before the appender sees them.
+logger.snapshotting-entity-lifecycle-handler.name = org.axonframework.eventsourcing.handler.SnapshottingEntityLifecycleHandler
+logger.snapshotting-entity-lifecycle-handler.level = INFO
+
+# Known-noisy Axon Framework classes, narrowed further than the WARN default
+logger.shutdown-latch.name = org.axonframework.common.lifecycle.ShutdownLatch
+logger.shutdown-latch.level = ERROR
+logger.default-command-gateway.name = org.axonframework.messaging.commandhandling.gateway.DefaultCommandGateway
+logger.default-command-gateway.level = ERROR
+logger.spring-bean-parameter-resolver.name = org.axonframework.extension.spring.config.annotation.SpringBeanParameterResolverFactory
+logger.spring-bean-parameter-resolver.level = ERROR
+logger.deep-equals-matcher.name = org.axonframework.test.matchers.DeepEqualsMatcher
+logger.deep-equals-matcher.level = ERROR
+logger.simple-query-update-emitter.name = org.axonframework.messaging.queryhandling.SimpleQueryUpdateEmitter
+logger.simple-query-update-emitter.level = OFF
+logger.in-memory-token-store.name = org.axonframework.messaging.eventhandling.processing.streaming.token.store.inmemory.InMemoryTokenStore
+logger.in-memory-token-store.level = ERROR
+logger.work-package.name = org.axonframework.messaging.eventhandling.processing.streaming.pooled.WorkPackage
+logger.work-package.level = ERROR
+logger.springboot-util.name = org.axonframework.extension.springboot.util
+logger.springboot-util.level = ERROR
diff --git a/test/src/test/resources/log4j2.properties b/test/src/test/resources/log4j2.properties
deleted file mode 100644
index fb10e2a5144..00000000000
--- a/test/src/test/resources/log4j2.properties
+++ /dev/null
@@ -1,46 +0,0 @@
-#
-# Copyright (c) 2010-2026. Axon Framework
-#
-# Licensed 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.
-#
-
-name=AxonTestConfiguration
-appenders = console
-
-appender.console.type = Console
-appender.console.name = STDOUT
-appender.console.layout.type = PatternLayout
-appender.console.layout.pattern = %d [%t] %-5p %-30.30c{1} %x - %m%n
-
-rootLogger.level = info
-rootLogger.appenderRefs = stdout
-rootLogger.appenderRef.stdout.ref = STDOUT
-# Main
-logger.axon.name = org.axonframework
-logger.axon.level = info
-logger.axon.additivity = false
-logger.axon.appenderRefs = stdout
-logger.axon.appenderRef.stdout.ref = STDOUT
-# Commands
-logger.logging-duplicate-command-handler-resolver.name = org.axonframework.commandhandling.LoggingDuplicateCommandHandlerResolver
-logger.logging-duplicate-command-handler-resolver.level = ERROR
-# Testing
-logger.deep-equals-matcher.name = org.axonframework.test.matchers.DeepEqualsMatcher
-logger.deep-equals-matcher.level = ERROR
-# Test Containers
-logger.testcontainers.name = org.testcontainers
-logger.testcontainers.level = WARN
-logger.docker-java.name = com.github.dockerjava
-logger.docker-java.level = WARN
-logger.docker-java-http5.name = com.github.dockerjava.zerodep.shaded.org.apache.hc.client5.http.wire
-logger.docker-java-http5.level = OFF
\ No newline at end of file