From 6902e32e4a70af074cdbb0e75444e2241502421c Mon Sep 17 00:00:00 2001
From: rschoene <rene.schoene@tu-dresden.de>
Date: Tue, 8 Feb 2022 15:27:24 +0100
Subject: [PATCH] working on slf4j debug messages

- fixed docu spelling typo
- updated preprocessor-testing to not require handler-jadds as input anymore
- grammar: removed obsolete DefinitionFileName from Handler
- Compiler: revert to standard-out/-err instead of JUL for logging (slf4j did not work here)
- Compiler: remove temporary code to create empty handler files
- Compiler: add some documentation snippets
- use slf4j loggers in tests instead of log4j ones
- always use slf4j as logTarget in tests
- update log4j impl to 2.17.1 in tests
---
 pages/docs/compiler.md                        |  2 +-
 .../src/main/jastadd/RagConnect.relast        |  2 +-
 .../jastadd/ragconnect/compiler/Compiler.java | 89 +++++++++----------
 ragconnect.tests/build.gradle                 | 61 +++++++++----
 .../ragconnect/tests/AbstractMqttTest.java    | 10 +--
 .../org/jastadd/ragconnect/tests/Errors.java  |  6 +-
 .../jastadd/ragconnect/tests/TestUtils.java   |  6 +-
 7 files changed, 98 insertions(+), 78 deletions(-)

diff --git a/pages/docs/compiler.md b/pages/docs/compiler.md
index 2c2cff3..4f5e191 100644
--- a/pages/docs/compiler.md
+++ b/pages/docs/compiler.md
@@ -12,7 +12,7 @@ Additional options are as follows.
 | `--logReads` | No (false) | Enable logging for every received message. |
 | `--logWrites` | No (false) | Enable logging for every sent message. |
 | `--logIncremental` | No (false) | Enable logging for observer in incremental dependency tracking. |
-| `--loggingTarget` | No (`console`) | Logging target to use, currently available: `console, slf4j`. |
+| `--logTarget` | No (`console`) | Logging target to use, currently available: `console, slf4j`. |
 | `--experimental-jastadd-329` | No (false) | Use trace events `INC_FLUSH_START` and `INC_FLUSH_END` ([JastAdd issue #329][jastadd-issue-329]), see [section about automatic dependency tracking](/using#dependency-tracking-automatically-derived). |
 | `--incremental` | No (false) | Enables incremental dependency tracking (if `trace` is also set appropriately). |
 | `--trace[=flush]` | No (false) | Enables incremental dependency tracking (if `incremental` is also set appropriately). |
diff --git a/ragconnect.base/src/main/jastadd/RagConnect.relast b/ragconnect.base/src/main/jastadd/RagConnect.relast
index 02cdec5..5605324 100644
--- a/ragconnect.base/src/main/jastadd/RagConnect.relast
+++ b/ragconnect.base/src/main/jastadd/RagConnect.relast
@@ -30,7 +30,7 @@ JavaMappingDefinitionType : MappingDefinitionType ::= Type:JavaTypeUse;
 JavaArrayMappingDefinitionType : MappingDefinitionType ::= Type:JavaTypeUse;
 DefaultMappingDefinition : MappingDefinition;
 
-Handler ::= <DefinitionFileName> <ClassName> <UniqueName> <InUse:boolean>;
+Handler ::= <ClassName> <UniqueName> <InUse:boolean>;
 
 Configuration ::=
 <LoggingEnabledForReads:boolean>
diff --git a/ragconnect.base/src/main/java/org/jastadd/ragconnect/compiler/Compiler.java b/ragconnect.base/src/main/java/org/jastadd/ragconnect/compiler/Compiler.java
index 6a13da0..dfe3f97 100644
--- a/ragconnect.base/src/main/java/org/jastadd/ragconnect/compiler/Compiler.java
+++ b/ragconnect.base/src/main/java/org/jastadd/ragconnect/compiler/Compiler.java
@@ -9,19 +9,19 @@ import org.jastadd.ragconnect.scanner.RagConnectScanner;
 import org.jastadd.relast.compiler.AbstractCompiler;
 import org.jastadd.relast.compiler.CompilerException;
 
-import java.io.*;
-import java.nio.charset.StandardCharsets;
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.IOException;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
-import java.nio.file.StandardCopyOption;
-import java.util.*;
-import java.util.logging.Level;
-import java.util.logging.Logger;
+import java.util.Collection;
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
 
 public class Compiler extends AbstractCompiler {
 
-  //  private ValueOption optionOutputDir;
   private ValueOption optionRootNode;
   private ValueOption optionProtocols;
   private BooleanOption optionPrintYaml;
@@ -38,8 +38,6 @@ public class Compiler extends AbstractCompiler {
   private static final String OPTION_PROTOCOL_MQTT = "mqtt";
   private static final String OPTION_PROTOCOL_REST = "rest";
 
-  private final static Logger LOGGER = Logger.getLogger(Compiler.class.getName());
-
   public Compiler() {
     super("ragconnect", true);
   }
@@ -63,11 +61,8 @@ public class Compiler extends AbstractCompiler {
       getConfiguration().printHelp(System.out);
       return;
     }
-    if (optionVerbose.value()) {
-      LOGGER.setLevel(Level.FINE);
-    }
 
-    LOGGER.info(() -> "Running RagConnect " + readVersion());
+    System.out.println("Running RagConnect " + readVersion());
 
     if (!getConfiguration().outputDir().exists()) {
       try {
@@ -93,35 +88,21 @@ public class Compiler extends AbstractCompiler {
       for (ErrorMessage e : ragConnect.errors()) {
         sb.append(e).append("\n");
       }
-      LOGGER.severe(sb::toString);
+      System.err.println(sb);
       System.exit(1);
     }
 
     if (optionPrintYaml.value()) {
       String yamlContent = ragConnect.toYAML().prettyPrint();
-      LOGGER.fine(yamlContent);
+      if (isVerbose()) {
+        System.out.println(yamlContent);
+      }
       writeToFile(getConfiguration().outputDir().toPath().resolve("RagConnect.yml"), yamlContent);
       return;
     }
 
-    LOGGER.fine("Writing output files");
-    // copy handlers into outputDir
-    for (Handler handler : ragConnect.getHandlerList()) {
-      if (!handler.getInUse()) {
-        continue;
-      }
-      String handlerFileName = handler.getDefinitionFileName();
-      try {
-        InputStream inputStream = new ByteArrayInputStream("".getBytes(StandardCharsets.UTF_8));
-//        if (inputStream == null) {
-//          throw new CompilerException("Could not open " + handlerFileName);
-//        }
-        Files.copy(inputStream,
-            getConfiguration().outputDir().toPath().resolve(handlerFileName),
-            StandardCopyOption.REPLACE_EXISTING);
-      } catch (IOException e) {
-        throw new CompilerException("Could not copy " + handlerFileName, e);
-      }
+    if (isVerbose()) {
+      System.out.println("Writing output files");
     }
     for (GrammarFile grammarFile : ragConnect.getProgram().getGrammarFileList()) {
       Path outputFile = getConfiguration().outputDir().toPath().resolve(grammarFile.getFileName());
@@ -138,14 +119,22 @@ public class Compiler extends AbstractCompiler {
 
   public static void main(String[] args) {
     System.setProperty("mustache.debug", "true");
+    Compiler compiler = new Compiler();
     try {
-      new Compiler().run(args);
+      compiler.run(args);
     } catch (CompilerException e) {
-      LOGGER.log(Level.SEVERE, e.getMessage(), e);
+      System.err.println(e.getMessage());
+      if (compiler.isVerbose()) {
+        e.printStackTrace();
+      }
       System.exit(1);
     }
   }
 
+  private boolean isVerbose() {
+    return optionVerbose != null && optionVerbose.value();
+  }
+
   /**
    * Reads the version string.
    * <p>
@@ -228,13 +217,13 @@ public class Compiler extends AbstractCompiler {
       switch (extension) {
         case "ast":
         case "relast":
-          // processGrammar
+          // process grammar
           program.addGrammarFile(parseGrammar(filename));
           atLeastOneGrammar = true;
           break;
         case "connect":
         case "ragconnect":
-          // process ragConnect
+          // process RagConnect specification
           ragConnect.addConnectSpecificationFile(parseConnectSpec(filename));
           atLeastOneRagConnect = true;
           break;
@@ -242,13 +231,13 @@ public class Compiler extends AbstractCompiler {
           throw new CompilerException("Unknown file extension " + extension + " in " + filename);
       }
     }
-    if (!atLeastOneGrammar) {
-      LOGGER.severe(() -> "No grammar file specified! (*.ast, *.relast)");
-    }
+
     if (!atLeastOneRagConnect) {
-      LOGGER.severe(() -> "No ragconnect file specified! (*.connect, *.ragconnect)");
+      System.err.println("No RagConnect specification file (*.connect, *.ragconnect) specified!");
     }
-    if (!atLeastOneGrammar && !atLeastOneRagConnect) {
+    if (!atLeastOneGrammar) {
+      // without a grammar, RagConnect can not operate
+      System.err.println("No grammar file (*.ast, *.relast) specified! Exiting!");
       System.exit(1);
     }
 
@@ -256,6 +245,7 @@ public class Compiler extends AbstractCompiler {
     ragConnect.flushTreeCache();
     ragConnect.treeResolveAll();
 
+    // add new parts to production rule, and new relations
     ragConnect.additionalRelations().forEach(ragConnectGrammarPart::addDeclaration);
     ragConnect.additionalTokens().forEach(TypeDecl::addComponent);
 
@@ -267,8 +257,8 @@ public class Compiler extends AbstractCompiler {
       RagConnectScanner scanner = new RagConnectScanner(reader);
       RagConnectParser parser = new RagConnectParser();
       GrammarFile grammarFile = (GrammarFile) parser.parse(scanner);
-      if (optionVerbose.value()) {
-        LOGGER.fine(grammarFile::dumpTree);
+      if (isVerbose()) {
+        System.out.println(grammarFile.dumpTree());
       }
       grammarFile.setFileName(toBaseName(filename));
       return grammarFile;
@@ -314,7 +304,9 @@ public class Compiler extends AbstractCompiler {
     // reuse "--incremental" and "--trace=flush" options of JastAdd
     boolean incrementalOptionActive = this.getConfiguration().incremental() && this.getConfiguration().traceFlush();
     ragConnect.getConfiguration().setIncrementalOptionActive(incrementalOptionActive);
-    LOGGER.fine(() -> "ragConnect.getConfiguration().IncrementalOptionActive = " + incrementalOptionActive);
+    if (isVerbose()) {
+      System.out.println("ragConnect.getConfiguration().IncrementalOptionActive = " + incrementalOptionActive);
+    }
 
     // reuse "--List" and "--Opt" options of JastAdd
     ragConnect.getConfiguration().setJastAddList(this.getConfiguration().listType());
@@ -330,12 +322,13 @@ public class Compiler extends AbstractCompiler {
     ragConnect.getConfiguration().setRootNode(rootNode);
 
     // Handler ::= <ClassName> <UniqueName> <InUse:boolean>;
-    ragConnect.addHandler(new Handler("MqttHandler.jadd", "MqttServerHandler", "mqtt", optionProtocols.hasValue(OPTION_PROTOCOL_MQTT)));
-    ragConnect.addHandler(new Handler("RestHandler.jadd", "RestServerHandler", "rest", optionProtocols.hasValue(OPTION_PROTOCOL_REST)));
+    ragConnect.addHandler(new Handler("MqttServerHandler", "mqtt", optionProtocols.hasValue(OPTION_PROTOCOL_MQTT)));
+    ragConnect.addHandler(new Handler("RestServerHandler", "rest", optionProtocols.hasValue(OPTION_PROTOCOL_REST)));
   }
 
   public String generateAspect(RagConnect ragConnect) {
     StringBuilder sb = new StringBuilder();
+    // add handler to get error message when template expansion did not find some part
     com.github.mustachejava.reflect.ReflectionObjectHandler roh = new com.github.mustachejava.reflect.ReflectionObjectHandler() {
       @Override
       public com.github.mustachejava.Binding createBinding(String name, final com.github.mustachejava.TemplateContext tc, com.github.mustachejava.Code code) {
@@ -360,7 +353,7 @@ public class Compiler extends AbstractCompiler {
 
   @Override
   protected int error(String message) {
-    LOGGER.log(Level.SEVERE, message);
+    System.err.println(message);
     return 1;
   }
 
diff --git a/ragconnect.tests/build.gradle b/ragconnect.tests/build.gradle
index 8bc120a..468c22a 100644
--- a/ragconnect.tests/build.gradle
+++ b/ragconnect.tests/build.gradle
@@ -9,7 +9,7 @@ buildscript {
     }
     dependencies {
         classpath 'org.jastadd:jastaddgradle:1.13.3'
-        classpath 'org.jastadd.preprocessor:testing:0.2.11'
+        classpath 'org.jastadd.preprocessor:testing:0.2.12'
     }
 }
 
@@ -60,7 +60,7 @@ dependencies {
 
     // rest and client
     testImplementation group: 'com.sparkjava', name: 'spark-core', version: '2.9.3'
-    testImplementation group: 'org.apache.logging.log4j', name: 'log4j-slf4j-impl', version: '2.11.2'
+    testImplementation group: 'org.apache.logging.log4j', name: 'log4j-slf4j-impl', version: '2.17.1'
     testImplementation group: 'org.glassfish.jersey.core', name: 'jersey-client', version: '2.31'
     testImplementation group: 'org.glassfish.jersey.inject', name: 'jersey-hk2', version: '2.31'
     testImplementation group: 'javax.activation', name: 'activation', version: '1.1.1'
@@ -158,6 +158,7 @@ task compileExampleTest(type: RagConnectTest) {
         inputFiles = [file('src/test/01-input/example/Test.relast'),
                       file('src/test/01-input/example/Test.connect')]
         rootNode = 'Model'
+        extraOptions = defaultRagConnectOptionsAnd()
     }
     relast {
         useJastAddNames = true
@@ -177,6 +178,7 @@ task compileDefaultOnlyRead(type: RagConnectTest) {
         inputFiles = [file('src/test/01-input/defaultOnlyRead/Test.relast'),
                       file('src/test/01-input/defaultOnlyRead/Test.connect')]
         rootNode = 'A'
+        extraOptions = defaultRagConnectOptionsAnd()
     }
     relast {
         useJastAddNames = true
@@ -195,6 +197,7 @@ task compileDefaultOnlyWrite(type: RagConnectTest) {
         inputFiles = [file('src/test/01-input/defaultOnlyWrite/Test.relast'),
                       file('src/test/01-input/defaultOnlyWrite/Test.connect')]
         rootNode = 'A'
+        extraOptions = defaultRagConnectOptionsAnd()
     }
     relast {
         useJastAddNames = true
@@ -214,6 +217,7 @@ task compileRead1write2(type: RagConnectTest) {
         inputFiles = [file('src/test/01-input/read1write2/Test.relast'),
                       file('src/test/01-input/read1write2/Test.connect')]
         rootNode = 'A'
+        extraOptions = defaultRagConnectOptionsAnd()
     }
     relast {
         useJastAddNames = true
@@ -233,6 +237,7 @@ task compileRead2write1(type: RagConnectTest) {
         inputFiles = [file('src/test/01-input/read2write1/Test.relast'),
                       file('src/test/01-input/read2write1/Test.connect')]
         rootNode = 'A'
+        extraOptions = defaultRagConnectOptionsAnd()
     }
     relast {
         useJastAddNames = true
@@ -253,6 +258,7 @@ task compileVia(type: RagConnectTest) {
                       file('src/test/01-input/via/Test.connect')]
         rootNode = 'A'
         protocols = ['mqtt', 'rest']
+        extraOptions = defaultRagConnectOptionsAnd()
     }
     relast {
         useJastAddNames = true
@@ -272,6 +278,7 @@ task compileTokenValueSend(type: RagConnectTest) {
         inputFiles = [file('src/test/01-input/tokenValueSend/Test.relast'),
                       file('src/test/01-input/tokenValueSend/Test.connect')]
         rootNode = 'A'
+        extraOptions = defaultRagConnectOptionsAnd()
     }
     relast {
         useJastAddNames = true
@@ -291,6 +298,7 @@ task compileTutorial(type: RagConnectTest) {
         inputFiles = [file('src/test/01-input/tutorial/Test.relast'),
                       file('src/test/01-input/tutorial/Test.connect')]
         rootNode = 'A'
+        extraOptions = defaultRagConnectOptionsAnd()
     }
     relast {
         useJastAddNames = true
@@ -310,6 +318,7 @@ task compileIncremental(type: RagConnectTest) {
         inputFiles = [file('src/test/01-input/incremental/Test.relast'),
                       file('src/test/01-input/incremental/Test.connect')]
         rootNode = 'A'
+        extraOptions = defaultRagConnectOptionsAnd()
     }
     relast {
         useJastAddNames = true
@@ -330,6 +339,7 @@ task compileMapping(type: RagConnectTest) {
         inputFiles = [file('src/test/01-input/mapping/Test.relast'),
                       file('src/test/01-input/mapping/Test.connect')]
         rootNode = 'A'
+        extraOptions = defaultRagConnectOptionsAnd()
     }
     relast {
         useJastAddNames = true
@@ -350,6 +360,7 @@ task compileTreeManual(type: RagConnectTest, dependsOn: ':ragconnect.base:compil
                       file('src/test/01-input/tree/Test.connect'),
                       file('src/test/01-input/tree/TestDependencies.connect')]
         rootNode = 'Root'
+        extraOptions = defaultRagConnectOptionsAnd()
     }
     relast {
         useJastAddNames = true
@@ -370,6 +381,7 @@ task compileTreeIncremental(type: RagConnectTest) {
         inputFiles = [file('src/test/01-input/tree/Test.relast'),
                       file('src/test/01-input/tree/Test.connect')]
         rootNode = 'Root'
+        extraOptions = defaultRagConnectOptionsAnd()
     }
     relast {
         useJastAddNames = true
@@ -392,6 +404,7 @@ task compileTreeAllowedTokens(type: RagConnectTest) {
                       file('src/test/01-input/treeAllowedTokens/Test.connect'),
                       file('src/test/01-input/treeAllowedTokens/TestDependencies.connect')]
         rootNode = 'Root'
+        extraOptions = defaultRagConnectOptionsAnd()
     }
     relast {
         useJastAddNames = true
@@ -412,6 +425,7 @@ task compileTreeAllowedTokensIncremental(type: RagConnectTest) {
         inputFiles = [file('src/test/01-input/treeAllowedTokens/Test.relast'),
                       file('src/test/01-input/treeAllowedTokens/Test.connect')]
         rootNode = 'Root'
+        extraOptions = defaultRagConnectOptionsAnd()
     }
     relast {
         useJastAddNames = true
@@ -427,13 +441,14 @@ task compileTreeAllowedTokensIncremental(type: RagConnectTest) {
 }
 
 // --- Test: list-manual ---
-task compileListManual(type: RagConnectTest, dependsOn: ':ragconnect.base:jar') {
+task compileListManual(type: RagConnectTest) {
     ragconnect {
         outputDir = file('src/test/02-after-ragconnect/list')
         inputFiles = [file('src/test/01-input/list/Test.relast'),
                       file('src/test/01-input/list/Test.connect'),
                       file('src/test/01-input/list/TestDependencies.connect')]
         rootNode = 'Root'
+        extraOptions = defaultRagConnectOptionsAnd()
     }
     relast {
         useJastAddNames = true
@@ -448,12 +463,13 @@ task compileListManual(type: RagConnectTest, dependsOn: ':ragconnect.base:jar')
 }
 
 // --- Test: list-incremental ---
-task compileListIncremental(type: RagConnectTest, dependsOn: ':ragconnect.base:jar') {
+task compileListIncremental(type: RagConnectTest) {
     ragconnect {
         outputDir = file('src/test/02-after-ragconnect/listInc')
         inputFiles = [file('src/test/01-input/list/Test.relast'),
                       file('src/test/01-input/list/Test.connect')]
         rootNode = 'Root'
+        extraOptions = defaultRagConnectOptionsAnd()
     }
     relast {
         useJastAddNames = true
@@ -469,13 +485,14 @@ task compileListIncremental(type: RagConnectTest, dependsOn: ':ragconnect.base:j
 }
 
 // --- Test: singleList-manual ---
-task compileSingleListManual(type: RagConnectTest, dependsOn: ':ragconnect.base:jar') {
+task compileSingleListManual(type: RagConnectTest) {
     ragconnect {
         outputDir = file('src/test/02-after-ragconnect/singleList')
         inputFiles = [file('src/test/01-input/singleList/Test.relast'),
                       file('src/test/01-input/singleList/Test.connect'),
                       file('src/test/01-input/singleList/TestDependencies.connect')]
         rootNode = 'Root'
+        extraOptions = defaultRagConnectOptionsAnd()
     }
     relast {
         useJastAddNames = true
@@ -490,12 +507,13 @@ task compileSingleListManual(type: RagConnectTest, dependsOn: ':ragconnect.base:
 }
 
 // --- Test: singleList-incremental ---
-task compileSingleListIncremental(type: RagConnectTest, dependsOn: ':ragconnect.base:jar') {
+task compileSingleListIncremental(type: RagConnectTest) {
     ragconnect {
         outputDir = file('src/test/02-after-ragconnect/singleListInc')
         inputFiles = [file('src/test/01-input/singleList/Test.relast'),
                       file('src/test/01-input/singleList/Test.connect')]
         rootNode = 'Root'
+        extraOptions = defaultRagConnectOptionsAnd()
     }
     relast {
         useJastAddNames = true
@@ -511,13 +529,14 @@ task compileSingleListIncremental(type: RagConnectTest, dependsOn: ':ragconnect.
 }
 
 // --- Test: singleListVariant-manual ---
-task compileSingleListVariantManual(type: RagConnectTest, dependsOn: ':ragconnect.base:jar') {
+task compileSingleListVariantManual(type: RagConnectTest) {
     ragconnect {
         outputDir = file('src/test/02-after-ragconnect/singleListVariant')
         inputFiles = [file('src/test/01-input/singleListVariant/Test.relast'),
                       file('src/test/01-input/singleListVariant/Test.connect'),
                       file('src/test/01-input/singleListVariant/TestDependencies.connect')]
         rootNode = 'Root'
+        extraOptions = defaultRagConnectOptionsAnd()
     }
     relast {
         useJastAddNames = true
@@ -532,13 +551,13 @@ task compileSingleListVariantManual(type: RagConnectTest, dependsOn: ':ragconnec
 }
 
 // --- Test: singleListVariant-incremental ---
-task compileSingleListVariantIncremental(type: RagConnectTest, dependsOn: ':ragconnect.base:jar') {
+task compileSingleListVariantIncremental(type: RagConnectTest) {
     ragconnect {
         outputDir = file('src/test/02-after-ragconnect/singleListVariantInc')
         inputFiles = [file('src/test/01-input/singleListVariant/Test.relast'),
                       file('src/test/01-input/singleListVariant/Test.connect')]
         rootNode = 'Root'
-        extraOptions = ['--experimental-jastadd-329']
+        extraOptions = defaultRagConnectOptionsAnd(['--experimental-jastadd-329'])
     }
     relast {
         useJastAddNames = true
@@ -554,13 +573,13 @@ task compileSingleListVariantIncremental(type: RagConnectTest, dependsOn: ':ragc
 }
 
 // --- Test: contextFreeSimple-incremental ---
-task compileContextFreeSimpleIncremental(type: RagConnectTest, dependsOn: ':ragconnect.base:jar') {
+task compileContextFreeSimpleIncremental(type: RagConnectTest) {
     ragconnect {
         outputDir = file('src/test/02-after-ragconnect/contextFreeSimpleInc')
         inputFiles = [file('src/test/01-input/contextFreeSimple/Test.relast'),
                       file('src/test/01-input/contextFreeSimple/Test.connect')]
         rootNode = 'Root'
-        extraOptions = ['--experimental-jastadd-329']
+        extraOptions = defaultRagConnectOptionsAnd(['--experimental-jastadd-329'])
     }
     relast {
         useJastAddNames = true
@@ -575,13 +594,13 @@ task compileContextFreeSimpleIncremental(type: RagConnectTest, dependsOn: ':ragc
 }
 
 // --- Test: forwarding-incremental ---
-task compileForwardingIncremental(type: RagConnectTest, dependsOn: ':ragconnect.base:jar') {
+task compileForwardingIncremental(type: RagConnectTest) {
     ragconnect {
         outputDir = file('src/test/02-after-ragconnect/forwardingInc')
         inputFiles = [file('src/test/01-input/forwarding/Test.relast'),
                       file('src/test/01-input/forwarding/Test.connect')]
         rootNode = 'Root'
-        extraOptions = ['--experimental-jastadd-329']
+        extraOptions = defaultRagConnectOptionsAnd(['--experimental-jastadd-329'])
     }
     relast {
         useJastAddNames = true
@@ -596,13 +615,13 @@ task compileForwardingIncremental(type: RagConnectTest, dependsOn: ':ragconnect.
 }
 
 // --- Test: indexed-send-incremental ---
-task compileIndexedSendIncremental(type: RagConnectTest, dependsOn: ':ragconnect.base:jar') {
+task compileIndexedSendIncremental(type: RagConnectTest) {
     ragconnect {
         outputDir = file('src/test/02-after-ragconnect/indexedSendInc')
         inputFiles = [file('src/test/01-input/indexedSend/Test.relast'),
                       file('src/test/01-input/indexedSend/Test.connect')]
         rootNode = 'Root'
-        extraOptions = ['--experimental-jastadd-329']
+        extraOptions = defaultRagConnectOptionsAnd(['--experimental-jastadd-329'])
     }
     relast {
         useJastAddNames = true
@@ -618,13 +637,13 @@ task compileIndexedSendIncremental(type: RagConnectTest, dependsOn: ':ragconnect
 }
 
 // --- Test: attribute-incremental ---
-task compileAttributeIncremental(type: RagConnectTest, dependsOn: ':ragconnect.base:jar') {
+task compileAttributeIncremental(type: RagConnectTest) {
     ragconnect {
         outputDir = file('src/test/02-after-ragconnect/attributeInc')
         inputFiles = [file('src/test/01-input/attribute/Test.relast'),
                       file('src/test/01-input/attribute/Test.connect')]
         rootNode = 'Root'
-        extraOptions = ['--experimental-jastadd-329']
+        extraOptions = defaultRagConnectOptionsAnd(['--experimental-jastadd-329'])
     }
     relast {
         useJastAddNames = true
@@ -638,3 +657,11 @@ task compileAttributeIncremental(type: RagConnectTest, dependsOn: ':ragconnect.b
         extraOptions = JASTADD_INCREMENTAL_OPTIONS_TRACING_FULL
     }
 }
+compileAttributeIncremental.outputs.upToDateWhen { false }
+
+static ArrayList<String> defaultRagConnectOptionsAnd(ArrayList<String> options = []) {
+    if (!options.contains('--logTarget=slf4j')) {
+        options.add('--logTarget=slf4j')
+    }
+    return options
+}
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 648e6d3..c537a1d 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
@@ -1,9 +1,9 @@
 package org.jastadd.ragconnect.tests;
 
 import defaultOnlyRead.ast.MqttHandler;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
 import org.junit.jupiter.api.*;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.io.IOException;
 import java.util.concurrent.TimeUnit;
@@ -20,7 +20,7 @@ public abstract class AbstractMqttTest {
 
   protected static MqttHandler publisher;
 
-  protected Logger logger = LogManager.getLogger(getClass());
+  protected Logger logger = LoggerFactory.getLogger(getClass());
 
   /**
    * if the initial/current value shall be sent upon connecting
@@ -65,7 +65,7 @@ public abstract class AbstractMqttTest {
     createModel();
     setupReceiverAndConnect();
 
-    logger.debug("Calling communicateSendInitialValue");
+    logger.info("Calling communicateSendInitialValue");
     communicateSendInitialValue();
   }
 
@@ -84,7 +84,7 @@ public abstract class AbstractMqttTest {
     createModel();
     setupReceiverAndConnect();
 
-    logger.debug("Calling communicateOnlyUpdatedValue");
+    logger.info("Calling communicateOnlyUpdatedValue");
     communicateOnlyUpdatedValue();
   }
 
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 4d32adf..1b49454 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
@@ -1,10 +1,10 @@
 package org.jastadd.ragconnect.tests;
 
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.io.File;
 import java.io.IOException;
@@ -22,7 +22,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
 
 public class Errors {
 
-  private static final Logger logger = LogManager.getLogger(Errors.class);
+  private static final Logger logger = LoggerFactory.getLogger(Errors.class);
   private static final String FILENAME_PATTERN = "$FILENAME";
   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/TestUtils.java b/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/TestUtils.java
index 9a6c22b..a3394ea 100644
--- a/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/TestUtils.java
+++ b/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/TestUtils.java
@@ -3,12 +3,12 @@ package org.jastadd.ragconnect.tests;
 import com.fasterxml.jackson.core.JsonEncoding;
 import com.fasterxml.jackson.core.JsonFactory;
 import com.fasterxml.jackson.core.JsonGenerator;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
 import org.awaitility.Awaitility;
 import org.awaitility.core.ConditionFactory;
 import org.jastadd.ragconnect.compiler.Compiler;
 import org.junit.jupiter.api.Assertions;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.io.ByteArrayOutputStream;
 import java.io.File;
@@ -36,7 +36,7 @@ import static org.junit.jupiter.api.Assertions.fail;
  */
 public class TestUtils {
 
-  private static final Logger logger = LogManager.getLogger(TestUtils.class);
+  private static final Logger logger = LoggerFactory.getLogger(TestUtils.class);
   public static final double DELTA = 0.001d;
   public static final String INPUT_DIRECTORY_PREFIX = "./src/test/01-input/";
   public static final String OUTPUT_DIRECTORY_PREFIX = "./src/test/02-after-ragconnect/";
-- 
GitLab