Improve logging

Change-Id: I4ccf9a82f082bf64e984f6cfcf9d9e57f7bf9e7a
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 3c80c69..f030d2a 100644
--- a/app/src/main/kotlin/de/ids_mannheim/korapxmltools/KorapXmlTool.kt
+++ b/app/src/main/kotlin/de/ids_mannheim/korapxmltools/KorapXmlTool.kt
@@ -1173,7 +1173,7 @@
                             fnames[docId] = zipEntry.name
                         }
                         val tokenSpans: NodeList = doc.getElementsByTagName("span")
-                        tokens[docId] = extractSpans(tokenSpans)
+                        tokens[docId] = extractSpans(tokenSpans, docId)
 
                         // For krill format with base foundry, collect base text data immediately
                         if (outputFormat == OutputFormat.KRILL && foundry == "base") {
@@ -1192,7 +1192,7 @@
                         if (outputFormat == OutputFormat.KRILL) {
                             val morphoFoundry = getFoundryForLayer(foundry, "morpho")
                             collectKrillMorphoDataDirect(docId, morphoFoundry, morphoSpans, "morpho")
-                            tokens[docId] = extractSpans(fsSpans)
+                            tokens[docId] = extractSpans(fsSpans, docId)
                         } else {
                             // For other formats, use the shared morpho map
                             // Merge with existing morpho data (e.g., from dependency.xml)
@@ -1216,7 +1216,7 @@
                                     LOGGER.fine("Merged morpho.xml with existing data for $docId (preserved ${morphoMap.count { it.value.head != "_" }} dependency relations)")
                                 }
                             }
-                            tokens[docId] = extractSpans(fsSpans)
+                            tokens[docId] = extractSpans(fsSpans, docId)
                         }
                     }
 
@@ -1989,7 +1989,7 @@
             .toString()
     }
 
-    private fun extractSpans(spans: NodeList): Array<Span> {
+    private fun extractSpans(spans: NodeList, docId: String): Array<Span> {
         val list = ArrayList<Span>()
         IntStream.range(0, spans.length).forEach { idx ->
             val node = spans.item(idx)
@@ -1997,14 +1997,14 @@
                 val fromAttr = node.getAttribute("from")
                 val toAttr = node.getAttribute("to")
                 if (fromAttr.isNullOrEmpty() || toAttr.isNullOrEmpty()) {
-                    LOGGER.warning("Skipping span with empty from/to attribute: from='$fromAttr' to='$toAttr'")
+                    LOGGER.warning("[$docId] Skipping span with empty from/to attribute: from='$fromAttr' to='$toAttr'")
                 } else {
                     try {
                         val from = Integer.parseInt(fromAttr)
                         val to = Integer.parseInt(toAttr)
                         list.add(Span(from, to))
                     } catch (e: NumberFormatException) {
-                        LOGGER.warning("Skipping span with invalid numeric offsets: from='$fromAttr' to='$toAttr' : ${e.message}")
+                        LOGGER.warning("[$docId] Skipping span with invalid numeric offsets: from='$fromAttr' to='$toAttr' : ${e.message}")
                     }
                 }
             }