在 Spring Boot 中获取 application.properties 中的用户主路径

Getting the user home path in application.properties in Spring Boot

这应该是一个非常简单的任务,但在做了相当多的研究之后,我发现很难找到任何方法来做到这一点。

我只想在当前用户的主目录中创建一个日志文件。根据 Official Documentation,我应该修改的变量是 logging.filelogging.path。但是如何将 user-home 的值放入 logging.path?

我试过这样设置:

logging.path=#{systemProperties['user.home']}

但没有成功。

我相信我已经解决了问题。有问题的日志文件实际上是在 class 路径中生成的,仅当 运行 来自 IDE(Eclipse Luna FYI)时。稍后当我制作一个 jar 文件并 运行 时,日志文件在 application.properties 文件中指定的正确位置生成。当我从 Eclipse 中 运行 时,我仍然不知道为什么它在 class 路径中生成。

我在开发环境中遇到了同样的问题,所以我尝试了另一种方法。如果您已阅读 official document 它也说明您可以提供自定义配置。如果没有提供 IMO 自定义配置,logging.path 将用作默认值。

我想使用 log4j2,所以我需要自定义模式和其他东西。为此,我实际上将 log4j2.xml 配置文件放入 class 路径中。查看我的 xml conf 文件以了解更多在开发和生产中实际工作的详细信息。

<?xml version="1.0" encoding="UTF-8"?>
<configuration monitorInterval="30">
    <properties>
        <property name="app.name">my-app</property>
        <property name="pattern">%d{ISO8601} %-5p %c - %m%n</property>
    </properties>
    <appenders>
        <Console name="console" target="SYSTEM_OUT">
            <PatternLayout pattern="${pattern}"/>
        </Console>

        <RollingRandomAccessFile name="my_app" append="false" fileName="${sys:user.home}\.${app.name}\logs${app.name}.log"
                 filePattern="${sys:user.home}\.${app.name}\logs$${date:yyyy-MM}/${app.name}-%d{yyyy-MM-dd}-%i.log.zip">
            <PatternLayout>
                <pattern>${pattern}</pattern>
            </PatternLayout>
            <Policies>
                <SizeBasedTriggeringPolicy size="5 MB"/>
            </Policies>
            <DefaultRolloverStrategy max="10"/>
        </RollingRandomAccessFile>
    </appenders>
    <loggers>
        <root level="INFO">
            <AppenderRef ref="console"/> <!-- To console -->
            <AppenderRef ref="my_app"/>
        </root>

        <AsyncLogger name="com.rameysoft.streamline.main" additivity="FALSE" level="DEBUG">
            <AppenderRef ref="console"/>
            <AppenderRef ref="my_app"/>
        </AsyncLogger>
    </loggers>
</configuration>

如果你使用Linux或MacOS,你可以使用logging.path=${HOME}/logs

${HOME}被环境变量HOME代替。

${user.home} 就是你的答案。

例如:${user.home}/logs/app/app.log

Spring 开机 2.2.6

logging.path=~/logs.

简单的解决方案是使用 ~ 符号作为主目录,适用于 linux/mac/windows。

SpringBoot 2.2.6