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



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

在测试和"常规"应用程序运行时期间,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的SysV init时设置每日滚动日志。d服务功能(将日志放入/var/log/)?
  • 将文件/tmp/spring.log被修改(因此被打破)并发,如果有两个或更多的春季启动应用程序在同一时间运行?

在我的Spring Boot应用程序中,我已经将<property name="LOG_TEMP" value="./logs"/>添加到src/test/resources/logback-test.xml:

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true">
    <property name="LOG_TEMP" value="./logs"/>
    <include resource="org/springframework/boot/logging/logback/base.xml"/>
    <logger name="com.example" level="INFO"/>

    <root level="WARN">
        <appender-ref ref="CONSOLE"/>
    </root>
</configuration>

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

Props to welcome for help out

我们遇到了一个问题,在同一台服务器上运行多个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

最新更新