繁体   English   中英

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

[英]Getting the user home path in application.properties in Spring Boot

这应该是一项非常直接的任务,但在做了大量研究之后,我发现很难找到任何方法来做到这一点。

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

我尝试将其设置为:

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

但没有任何成功。

如果您使用 Linux 或 Mac OS,则可以使用logging.path=${HOME}/logs

${HOME}替换为环境变量HOME

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

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

弹簧靴 2.2.6

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

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

我想使用 log4j2,所以我需要自定义模式和其他东西。 为此,我实际上将 log4j2.xml 配置文件放入类路径中。 查看我的 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>

logging.path=~/logs.

简单的解决方案是使用~符号作为主目录,在 linux/mac/windows 上运行良好。

SpringBoot 2.2.6

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM