【问题标题】:Spring Boot log file relative to jar directory not start directory相对于 jar 目录的 Spring Boot 日志文件不是启动目录
【发布时间】:2019-07-21 11:43:16
【问题描述】:

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

例子:

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

目录:

  • /app/dir/app.jar
  • /随机/目录

开始:

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 目录是什么。是否有允许我在启动后设置 logging.file 位置的 Java 解决方案?还是此时记录器已经初始化?

完整的解决方案:基于@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

【问题讨论】:

    标签: java spring spring-boot


    【解决方案1】:

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

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

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

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

    【讨论】:

    • java -DLOGDIR=/app/dir -jar /app/dir/app.jar
    【解决方案2】:

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

    使用. 表示您希望从我们的控制台窗口打开的位置开始。这是与您在终端中的位置相对的路径。

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

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

    【讨论】:

    • 谢谢,我在原始帖子中添加了“附加信息”,以阐明 jar 将在不同的操作系统上以不同的路径运行。所以绝对路径不是一种选择。除非我可以在 yaml/properties 文件中做一个操作系统条件变量。
    猜你喜欢
    • 1970-01-01
    • 2015-02-08
    • 2019-11-25
    • 1970-01-01
    • 2017-11-09
    • 1970-01-01
    • 2021-11-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多