From 6eb9ced9285472913e89a1f58a8dc071e91631b3 Mon Sep 17 00:00:00 2001 From: Laurettta Date: Tue, 28 Apr 2026 23:32:15 +0100 Subject: [PATCH] [bugfix] Normalise Log4j2 config path to file: URI for cross-platform compatibility Log4j2 cannot resolve a bare Windows path set via the log4j2.configurationFile system property. Converting to a file: URI ensures correct resolution on all platforms. --- exist-start/src/main/java/org/exist/start/Main.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/exist-start/src/main/java/org/exist/start/Main.java b/exist-start/src/main/java/org/exist/start/Main.java index f42fd61389..91c5dbdfa9 100644 --- a/exist-start/src/main/java/org/exist/start/Main.java +++ b/exist-start/src/main/java/org/exist/start/Main.java @@ -65,6 +65,8 @@ import java.io.*; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; +import java.net.URI; +import java.net.URISyntaxException; import java.nio.file.Files; import java.nio.file.InvalidPathException; import java.nio.file.Path; @@ -284,10 +286,11 @@ public void runEx(String[] args) throws StartException { if (existHomeDir.isPresent() && Files.exists(existHomeDir.get().resolve(CONFIG_DIR_NAME))) { log4jConfigurationFile = existHomeDir.map(f -> f.resolve(CONFIG_DIR_NAME).resolve("log4j2.xml")); } + } - if (log4jConfigurationFile.isPresent() && Files.isReadable(log4jConfigurationFile.get())) { - System.setProperty(PROP_LOG4J_CONFIGURATION_FILE, log4jConfigurationFile.get().toAbsolutePath().toString()); - } + // (fix for windows machine)Always normalise to a file: URI so Log4j2 can resolve it on all platforms (including Windows) + if (log4jConfigurationFile.isPresent() && Files.isReadable(log4jConfigurationFile.get())) { + System.setProperty(PROP_LOG4J_CONFIGURATION_FILE, log4jConfigurationFile.get().toAbsolutePath().toUri().toString()); } if (log4jConfigurationFile.isPresent()) {