diff --git a/app/src/main/kotlin/de/ids_mannheim/korapxmltools/KorapXmlTool.kt b/app/src/main/kotlin/de/ids_mannheim/korapxmltools/KorapXmlTool.kt
index 41f3361..5cd2a43 100644
--- a/app/src/main/kotlin/de/ids_mannheim/korapxmltools/KorapXmlTool.kt
+++ b/app/src/main/kotlin/de/ids_mannheim/korapxmltools/KorapXmlTool.kt
@@ -2898,7 +2898,7 @@
         // Skip if already output (thread-safe check with ConcurrentHashMap.KeySet)
         if (outputTexts.contains(docId)) return
 
-        LOGGER.info("Collecting krill base data for $docId: text=${texts[docId] != null}, tokens=${tokens[docId] != null}, sentences=${sentences[docId] != null}")
+        LOGGER.info("Processing base data for $docId: text=${texts[docId] != null}, tokens=${tokens[docId] != null}, sentences=${sentences[docId] != null}, foundry=base")
 
         val textData = krillData.getOrPut(docId) {
             KrillTextData(textId = docId)
diff --git a/app/src/test/kotlin/de/ids_mannheim/korapxmltools/KorapXmlToolTest.kt b/app/src/test/kotlin/de/ids_mannheim/korapxmltools/KorapXmlToolTest.kt
index 7fd3154..9b22a26 100644
--- a/app/src/test/kotlin/de/ids_mannheim/korapxmltools/KorapXmlToolTest.kt
+++ b/app/src/test/kotlin/de/ids_mannheim/korapxmltools/KorapXmlToolTest.kt
@@ -473,6 +473,7 @@
         val generatedTar = ensureKrillTar("wud24_full_foundries") { outputDir ->
             arrayOf(
                 "-f", "krill",
+                "-l", "info",
                 "-D", outputDir.path,
                 baseZip,
                 spacyZip,
@@ -484,6 +485,33 @@
         assertTrue(generatedTar.exists(), "Generated krill tar should exist at ${generatedTar.path}")
         assertTrue(generatedTar.length() > 0, "Generated tar should not be empty")
 
+        // Check that log file exists
+        val logFile = File(generatedTar.path.replace(Regex("\\.tar$"), ".log"))
+        assertTrue(logFile.exists(), "Log file should exist at ${logFile.path}")
+        assertTrue(logFile.length() > 0, "Log file should not be empty")
+
+        // Check that texts are processed in alphabetical order for each foundry
+        val logContent = logFile.readText()
+        val foundries = listOf("spacy", "marmot", "opennlp", "treetagger")
+
+        foundries.forEach { foundry ->
+            // Extract text IDs for this foundry from log using regex
+            val pattern = Regex("Processing.*for ([^ :]+).*foundry=$foundry")
+            val textIds = pattern.findAll(logContent)
+                .map { it.groupValues[1] }
+                .toList()
+
+            if (textIds.isNotEmpty()) {
+                // Check if text IDs are in alphabetical order
+                val sortedTextIds = textIds.sorted()
+                assertEquals(
+                    sortedTextIds,
+                    textIds,
+                    "Text IDs for foundry '$foundry' should be processed in alphabetical order. Expected: $sortedTextIds, but got: $textIds"
+                )
+            }
+        }
+
         // Extract tar to verify it contains JSON files
         val extractDir = File.createTempFile("extract", "").let {
             it.delete()
