相对于jar目录的Spring Boot日志文件未启动目录

时间:2019-02-27 17:01:15

标签: java spring spring-boot

我可以在Spring Boot配置文件中指定相对于Spring Boot jar而不是相对于jar启动目录的日志文件位置吗?

示例:

#application.yml
logging:
  file: ./logs/app.log

目录:

  • /app/dir/app.jar
  • / random / dir

开始:

cd /random/dir
java -jar /app/dir/app.jar

结果:

  • /random/dir/logs/app.log

所需:

  • /app/dir/logs/app.log

其他信息: 该jar将在不同的操作系统上运行。因此jar路径可能类似于:

  • /app/dir/app.jar
  • C:\ app \ dir \ app.jar

在运行时,我可以计算出jar / install目录。是否有Java解决方案可以让我在启动后设置logging.file的位置?还是记录器已在此时初始化?

完整的解决方案:基于@satyesht

#application.yml

app:
  log:
    #Set a default directory in case a user "double clicks" the jar to launch it.
    dir: ./logs
    file: app.log

logging:
  file: ${app.log.dir}/${app.log.file}

开始:

cd /random/dir
java -Dapp.log.dir=/app/dir/logs -jar /app/dir/app.jar

2 个答案:

答案 0 :(得分:2)

一种简单的方法是将日志目录作为如下的系统属性传递。

#application.yml
logging:
  file: ${LOGDIR}/logs/app.log

在运行应用程序时,您可以将LOGDIR系统属性指定为VM参数

cd /random/dir
java -jar /app/dir/app.jar -DLOGDIR=/app/dir/

答案 1 :(得分:0)

您必须提前知道jarfile的位置。但是是的,区别在于absolute, and relative paths之间。

使用.表示您要从打开控制台窗口的位置开始。这是一条与您在终端中的位置相对相关的路径。

使用/表示您要从驱动器的根目录开始。现在,显然您不想将文件存储在驱动器的根目录中。但是,假设我把我的jar放在了文件夹中:/app/dir/app.jar,那么配置就这么简单:

#application.yml
logging:
  file: /app/dir/logs/app.log