diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 44a279a43ccbcc609e637a4b68255bc6b81a2467..401f721305affd0b14d18923027c42dd32c6edfb 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -42,6 +42,8 @@ test:
     - ./gradlew --console=plain --no-daemon allTests
   artifacts:
     when: always
+    paths:
+      - "ragconnect.tests/test.log"
     reports:
       junit: "ragconnect.tests/build/test-results/**/TEST-*.xml"
     expire_in: 1 week
diff --git a/ragconnect.tests/.gitignore b/ragconnect.tests/.gitignore
index 87b4cdd3d7c6a41502ca98703abeeb69a1d536fb..31993cebfe5fdbd5c2727c631ebfec8394963232 100644
--- a/ragconnect.tests/.gitignore
+++ b/ragconnect.tests/.gitignore
@@ -3,3 +3,4 @@ src/gen-res/
 src/gen/
 out/
 *.class
+test.log
diff --git a/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/AbstractMqttTest.java b/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/AbstractMqttTest.java
index c537a1db389f34545e59fc9c45f3525ce421dd75..61fc420c7e984070983dbfc181feb3519f7f1aa1 100644
--- a/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/AbstractMqttTest.java
+++ b/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/AbstractMqttTest.java
@@ -14,14 +14,12 @@ import java.util.concurrent.TimeUnit;
  * @author rschoene - Initial contribution
  */
 @Tag("mqtt")
-public abstract class AbstractMqttTest {
+public abstract class AbstractMqttTest extends RagConnectTest {
 
   private static boolean checkDone = false;
 
   protected static MqttHandler publisher;
 
-  protected Logger logger = LoggerFactory.getLogger(getClass());
-
   /**
    * if the initial/current value shall be sent upon connecting
    */
@@ -61,7 +59,6 @@ public abstract class AbstractMqttTest {
   public final void testCommunicateSendInitialValue() throws IOException, InterruptedException {
     this.writeCurrentValue = true;
 
-    logger.debug("Start testCommunicateSendInitialValue");
     createModel();
     setupReceiverAndConnect();
 
@@ -80,7 +77,6 @@ public abstract class AbstractMqttTest {
   public final void testCommunicateOnlyUpdatedValue() throws IOException, InterruptedException {
     this.writeCurrentValue = false;
 
-    logger.debug("Start testCommunicateOnlyUpdatedValue");
     createModel();
     setupReceiverAndConnect();
 
diff --git a/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/Errors.java b/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/Errors.java
index d774d91d91fefab6b86d0b0bdf2f2c8e4e72d729..9d4c730ad3fa8a27e8de22a10f80d4594ff3dbf9 100644
--- a/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/Errors.java
+++ b/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/Errors.java
@@ -22,9 +22,8 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
  *
  * @author rschoene - Initial contribution
  */
-public class Errors {
+public class Errors extends RagConnectTest {
 
-  private static final Logger logger = LoggerFactory.getLogger(Errors.class);
   private static final String ERROR_DIRECTORY = "errors/";
   private static final String OUTPUT_DIRECTORY = TestUtils.OUTPUT_DIRECTORY_PREFIX + ERROR_DIRECTORY;
 
diff --git a/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/JavaTest.java b/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/JavaTest.java
index 4e807cc3e62666dbf3a83f3922d9724f127b5110..0c33e9c65e346a45fd4458428a81a273a9cf8148 100644
--- a/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/JavaTest.java
+++ b/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/JavaTest.java
@@ -21,8 +21,7 @@ import static org.junit.jupiter.api.Assertions.*;
  *
  * @author rschoene - Initial contribution
  */
-@Tag("New")
-public class JavaTest {
+public class JavaTest extends RagConnectTest {
 
   private static final String TOPIC_RECEIVE_TOKEN = "receiveToken";
   private static final String TOPIC_RECEIVE_NODE_PLAIN = "receiveNode/plain";
@@ -35,7 +34,6 @@ public class JavaTest {
   private static final String TOPIC_SEND_MANY = "sendMany";
   private static final String TOPIC_SEND_NTA = "sendNTA";
 
-  protected Logger logger = LoggerFactory.getLogger(getClass());
   private Root model;
   private SenderRoot senderRoot;
   private ReceiverRoot receiverRoot;
diff --git a/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/MqttHandlerTest.java b/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/MqttHandlerTest.java
index 091990a64a31c01a6f2c59b934cfe15b6fb76ece..be61201ef687a72bc252380166cf1abbf5b82eb4 100644
--- a/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/MqttHandlerTest.java
+++ b/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/MqttHandlerTest.java
@@ -20,7 +20,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
  * @author rschoene - Initial contribution
  */
 @Tag("mqtt")
-public class MqttHandlerTest {
+public class MqttHandlerTest extends RagConnectTest {
 
   @Test
   public void defaultBehaviour() {
diff --git a/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/RagConnectTest.java b/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/RagConnectTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..e2da1577980ad00b644f3f95c25d7e66ca11be79
--- /dev/null
+++ b/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/RagConnectTest.java
@@ -0,0 +1,26 @@
+package org.jastadd.ragconnect.tests;
+
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.TestInfo;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Base for all RagConnect tests.
+ *
+ * @author rschoene - Initial contribution
+ */
+public class RagConnectTest {
+  protected Logger logger = LoggerFactory.getLogger(getClass());
+
+  @BeforeEach
+  public void logStart(TestInfo testInfo) {
+    logger.info("Starting {}.{}", getClass().getSimpleName(), testInfo.getDisplayName());
+  }
+
+  @AfterEach
+  public void logEnd(TestInfo testInfo) {
+    logger.info("Finished {}.{}", getClass().getSimpleName(), testInfo.getDisplayName());
+  }
+}
diff --git a/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/RegressionTests.java b/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/RegressionTests.java
index 67c82177d96fe34c6379b9d62537f785292827df..5f74942484f67dae810feb70e92d573ecebf9aba 100644
--- a/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/RegressionTests.java
+++ b/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/RegressionTests.java
@@ -17,7 +17,7 @@ import static org.junit.jupiter.api.Assertions.*;
  *
  * @author rschoene - Initial contribution
  */
-public class RegressionTests {
+public class RegressionTests extends RagConnectTest {
 
   private static final String REGRESSION_TEST_OUTPUT_DIRECTORY = "regression-test/";
 
diff --git a/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/Warnings.java b/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/Warnings.java
index b0840d6d2d6d35ed50f759d61198b2d25586d800..121843c724d075318e483aa0ac072a53c64998e0 100644
--- a/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/Warnings.java
+++ b/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/Warnings.java
@@ -21,9 +21,8 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
  *
  * @author rschoene - Initial contribution
  */
-public class Warnings {
+public class Warnings extends RagConnectTest {
 
-  private static final Logger logger = LoggerFactory.getLogger(Warnings.class);
   private static final String WARNING_DIRECTORY = "warnings/";
   private static final String OUTPUT_DIRECTORY = TestUtils.OUTPUT_DIRECTORY_PREFIX + WARNING_DIRECTORY;
 
diff --git a/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/relation/RelationTest.java b/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/relation/RelationTest.java
index a245387637d4a61f0e6ff38ab1389e340f4a7093..4ac0f55dc829a628c63c79409e69cf97f60985cf 100644
--- a/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/relation/RelationTest.java
+++ b/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/relation/RelationTest.java
@@ -616,7 +616,7 @@ public class RelationTest extends AbstractMqttTest {
     biB(3).getInner().setInnerValue("inner-bi-b3");
     checker.check();
 
-    System.out.println(model.ragconnectEvaluationCounterSummary());
+    logger.debug(model.ragconnectEvaluationCounterSummary());
   }
 
   private void assertNullOrA(String expectedValue, A actual, String alias) {
diff --git a/ragconnect.tests/src/test/resources/log4j2.xml b/ragconnect.tests/src/test/resources/log4j2.xml
index 653d6c357cef6a51c43a2fe9e54d4a3e86148abf..9a1b22ee0120043991dfcfc7ad9c41f6dd5b4f06 100644
--- a/ragconnect.tests/src/test/resources/log4j2.xml
+++ b/ragconnect.tests/src/test/resources/log4j2.xml
@@ -4,6 +4,9 @@
         <Console name="Console" target="SYSTEM_OUT">
             <PatternLayout pattern="%highlight{%d{HH:mm:ss.SSS} %-5level [%t] %logger{20} - %msg%n}" disableAnsi="false"/>
         </Console>
+        <File name="TestLogs" fileName="test.log" append="false">
+            <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level [%t] %logger{20} - %msg%n"/>
+        </File>
     </Appenders>
     <Loggers>
         <Root level="debug">