首页 > 解决方案 > 如何将 logback 文件路径概括为 windows/linux 操作系统?

问题描述

我有一个 Java 应用程序。我的开发环境是 Windows 操作系统,我的生产操作系统是 linux。该应用程序需要读取/写入操作系统中的一些文件,其中包括日志文件(我正在使用 logback lib)。在我的 Windows 开发环境中,我将日志路径配置为绝对位置:C://logger/my-app.log

以下是相关的 logback.xml 配置文件代码:

<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>C://logger/my-app.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>C://logger/my-app-%d{yyyy-MM-dd}.log</fileNamePattern>
        <maxHistory>30</maxHistory>
    </rollingPolicy>
    <encoder>
        <charset>UTF-8</charset>
        <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
</appender>

但是,正如所提到的,我的产品环境是一个 linux 操作系统。我也想在 linux 机器上用一个 config xml 文件在绝对路径下创建文件。我不希望在已部署的 jar 文件的上下文中创建该文件,而是在某个绝对路径中创建该文件。怎么做到呢?

标签: javalinuxwindowslogbackfilepath

解决方案


为了使 Web 应用程序具有可移植性,并且无论任何操作系统都应生成日志文件。您必须使用user.home环境变量属性。我在下面提供了适用于 Windows 和 Linux 的 logback 片段。

<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${user.home}/logs/my-app.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>C://logger/my-app-%d{yyyy-MM-dd}.log</fileNamePattern>
        <maxHistory>30</maxHistory>
    </rollingPolicy>
    <encoder>
        <charset>UTF-8</charset>
        <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
</appender>

推荐阅读