В вашем примере я вижу, что относительный путь к журналам одинаков в обоих случаях, поэтому, если вы всегда хотите иметь такую структуру, вы можете определить путь как:
<File name="log"
fileName="../log/log_${date:dd-MM-yyyy_HH-mm-ss}.csv">
Если вы хотите (пере) настроить путь к файлу во время выполнения, отметьте ответ .
Короче говоря, после настройки системного свойства с помощью
System.setProperty("myapp.data.dir", driveLetter);
Вы должны перенастроить регистратор:
org.apache.logging.log4j.core.LoggerContext ctx =
(org.apache.logging.log4j.core.LoggerContext) LogManager.getContext(false);
ctx.reconfigure();
Имейте в виду, что в этом случае вам следует отредактировать XML-файл конфигурации, чтобы использовать системное свойство, как показано ниже:
<File name="log"
fileName="${sys:myapp.data.dir}/log/log_${date:dd-MM-yyyy_HH-mm-ss}.csv">
Интересный факт: есть хитрый способ использовать корневой диск и пути сборки:
<Properties>
<Property name="rootDrive">../../../../../../../../../../../../../../</Property>
</Properties>
<File name="log"
fileName="${rootDrive}/your/folder/structure/log/log_${date:dd-MM-yyyy_HH-mm-ss}.csv">
Имейте в виду, однако, что я бы не советовал это использовать для каких-либо целей, кроме проектов, которые вы будете использовать только для себя, поскольку это может привести к неожиданным результатам, если пользователь запустит приложение из более глубокого уровня папок.