【问题标题】:Getting the user home path in application.properties in Spring Boot在 Spring Boot 中的 application.properties 中获取用户主路径
【发布时间】:2015-08-06 14:07:00
【问题描述】:

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

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

我试过这样设置:

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

但没有任何成功。

【问题讨论】:

  • 您是否尝试过${user.home}...
  • @M.Deinum 仍然没有。它只是在类路径中创建一个文件。
  • 你在哪里设置这些变量?
  • 在 appication.properties 文件中
  • 尝试作为系统或环境属性,因为在application.properties 文件中设置它们可能为时已晚。

标签: spring logging spring-boot spring-el


【解决方案1】:

logging.path=~/logs.

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

SpringBoot 2.2.6

【讨论】:

  • 对我不起作用(Linux)。我得到 /home/user/app/~/logs。
【解决方案2】:

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

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

Spring Boot 2.2.6

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

    • 奇怪的是,它可以在(我的)Windows 上运行,但HOME 不会返回 Windows 主页...我不知道它从哪里获取价值。你知道那些环境变量是从哪里来的吗?
    【解决方案4】:

    我在开发环境中遇到了同样的问题,所以我尝试了另一种方法。如果您已阅读 official document 它还指出您可以提供自定义配置。如果没有提供自定义配置 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>
    

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        猜你喜欢
        • 2022-11-10
        • 2017-08-28
        • 1970-01-01
        • 1970-01-01
        • 2015-04-20
        • 2019-11-28
        • 1970-01-01
        • 2018-01-07
        • 2020-02-28
        相关资源
        最近更新 更多