java - Spring Boot日志文件相对于jar目录而不是启动目录

标签 java spring spring-boot

在我的 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 目录是什么。是否有 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

最佳答案

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

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

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

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

关于java - Spring Boot日志文件相对于jar目录而不是启动目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54910782/

相关文章:

java - 在我的 pojo 字段中使用 "public"修饰符而不是 "private"是否有任何风险?

java - 捕获 Throwable 和 StackOverflowError 时的不同行为

spring-boot - 使用 kotlin spring 和 docker 配置远程调试

spring - 无法启动 bean kafkaListenerContainer : java. lang.IllegalArgumentException

java - 加载 swagger UI 时 Spring Security 调用所有服务

java - java中显示图像时内存泄漏(?)

java - jackson 本地日期 : one day off during serialization

java - 初始化 block vs 构造函数 vs 变量初始化

java - spring mvc 中的静态资源

spring - 在运行时模拟用户进行spring hadoop配置