在 Spring Boot 中获取 application.properties 中的用户主路径
Getting the user home path in application.properties in Spring Boot
这应该是一个非常简单的任务,但在做了相当多的研究之后,我发现很难找到任何方法来做到这一点。
我只想在当前用户的主目录中创建一个日志文件。根据 Official Documentation,我应该修改的变量是 logging.file
和 logging.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
这应该是一个非常简单的任务,但在做了相当多的研究之后,我发现很难找到任何方法来做到这一点。
我只想在当前用户的主目录中创建一个日志文件。根据 Official Documentation,我应该修改的变量是 logging.file
和 logging.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