Logback 不会相对于为 MacOs 编译的 jar 文件写入

Logback does not write relative to jar file in which it has been compiled for MacOs

问题是 logback 在 windows 中的行为与在 MacO 中的行为不同。 以下设置在 windows 上正常工作,并创建相对于应用程序所在位置的日志文件 运行。

然而,在 MacOs 上,它似乎总是写入相对于主文件夹的日志文件,导致路径类似于 user/myUsername/log/logExport.txt。 然而,这应该是 user/myUserName/path/to/app/log/logExport.txt.

这是一个问题,因为此应用程序将 运行 在包括 MacO 在内的许多不同计算机上独立运行。 该应用程序始终使用 bash 或类似的脚本文件启动。

logback.xml 包含在 jar 文件中,因此在构建应用程序后无法更改。(因此为什么它是相对路径) 为了方便客户,我想避免让他们设置属性文件或类似文件。 我有什么方法可以将 logback 指向 mac 上的正确位置? 这是一个 Maven Java 项目。

这在 windows machines 上 100% 正常工作。

<appender name="ROLLING"
    class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>log/logExport.txt</file>
    <rollingPolicy
        class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <!-- daily rollover -->
        <fileNamePattern>log/archive/logExport.%d{yyyy-MM-dd}.txt</fileNamePattern>
        <maxHistory>50</maxHistory>
        <totalSizeCap>1GB</totalSizeCap>

    </rollingPolicy>

    <encoder>
        <pattern>%d{HH:mm:ss.SSS} %-5level %logger{35} - %msg%n</pattern>
    </encoder>
</appender>

This should however be user/myUserName/path/to/app/log/logExport.txt.

在这种情况下,应用程序需要从 user/myUserName/path/to/app 开始。这是您配置中的相对路径,将相对于 current directory。最好的办法是在快捷方式中将该目录指定为起始目录,或者在启动脚本中将其 cd 指定为起始目录。