Spring Boot在测试期间使用/tmp/spring.log文件

时间:2016-06-28 16:05:03

标签: logging spring-boot logback

我的一个Spring Boot应用程序在Maven test 阶段出现问题。

在测试期间和"常规"在应用程序运行时,Spring Boot应用程序使用与src/main/resources/logback-spring.xml非常相似的logback配置文件。此配置文件(可传递)包括Logback配置文件base.xmlfile-appender.xml。这些配置文件设置 logback属性 LOG_FILE=/tmp/spring.log

我认为最佳做法是文件/tmp/server.log归用户和群组${MY_SPRING_BOOT_APPLICATION}所有。

Jenkins以用户jenkins身份运行。 jenkins没有/tmp/server.log的写入权限。因此,当Jenkins执行时,JUnit测试失败。

  • 配置日志记录的最佳方法是什么,以便在Jenkins build-with-tests 期间正常运行,以便设置每日滚动日志记录利用Spring Boot's SysV init.d service functionality(将日志放入/var/log/)?
  • 如果同时运行两个或多个Spring Boot应用程序,是否会同时修改文件/tmp/spring.log(因此会被破坏)?

2 个答案:

答案 0 :(得分:11)

在我的Spring Boot应用程序中,我已将haversine formula添加到RealVector vector = ... RealMatrix matrix = ... RealVector result = matrix.preMultiply(vector);

<property name="LOG_TEMP" value="./logs"/>

这样,在Maven测试期间,将在当前(测试)工作目录中创建一个单独的日志文件。

Props to welcor for helping out

答案 1 :(得分:0)

我们遇到了一个问题,即在同一台服务器上运行多个 Spring Boot 模块会导致多个进程尝试写入 /tmp/spring.log。我们通过更新 logback-spring.xml 在日志名称中包含 ${PID} 解决了这个问题:

<property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}/spring.log}"/>

<property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}/spring-${PID}.log}"/>

相关 Spring 文档:https://docs.spring.io/spring-boot/docs/1.5.x/reference/html/howto-logging.html#howto-configure-logback-for-logging