Krill: log to file

Change-Id: I49ce76c734cba1413bebc8e4571849a0e065ce03
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 e4b3d3e..70a4b37 100644
--- a/app/src/main/kotlin/de/ids_mannheim/korapxmltools/KorapXmlTool.kt
+++ b/app/src/main/kotlin/de/ids_mannheim/korapxmltools/KorapXmlTool.kt
@@ -537,6 +537,34 @@
             krillOutputFileName = File(outputDir, "$baseZipName.krill.tar").absolutePath
             LOGGER.info("Initializing krill TAR output: $krillOutputFileName")
 
+            // Redirect logging to file - remove console handler so only progress bar appears on screen
+            val logFilePath = krillOutputFileName!!.replace(Regex("\\.tar$"), ".log")
+            val fileHandler = java.util.logging.FileHandler(logFilePath, true)
+            fileHandler.formatter = ColoredFormatter()
+
+            // Remove existing console handlers so logs only go to file
+            for (handler in LOGGER.handlers.toList()) {
+                LOGGER.removeHandler(handler)
+            }
+            LOGGER.addHandler(fileHandler)
+            LOGGER.info("Logging redirected to: $logFilePath")
+
+            // Mirror System.err to the same log file
+            val errPs = java.io.PrintStream(java.io.BufferedOutputStream(java.io.FileOutputStream(logFilePath, true)), true)
+            val oldErr = System.err
+            System.setErr(errPs)
+
+            // Restore System.err and remove file handler on shutdown
+            Runtime.getRuntime().addShutdownHook(Thread {
+                try {
+                    LOGGER.info("Shutting down; closing krill log handler")
+                    LOGGER.removeHandler(fileHandler)
+                    fileHandler.close()
+                } catch (_: Exception) {}
+                try { System.setErr(oldErr) } catch (_: Exception) {}
+                try { errPs.close() } catch (_: Exception) {}
+            })
+
             if (File(krillOutputFileName!!).exists() && !overwrite) {
                 LOGGER.severe("Output file $krillOutputFileName already exists. Use --overwrite to overwrite.")
                 exitProcess(1)