loggingspring-bootlogback

Spring Boot uses /tmp/spring.log file during testing


One of my Spring Boot applications makes problems during its Maven test phase.

Both during testing and "regular" application runtime, the Spring Boot application uses a logback configuration file very similar to src/main/resources/logback-spring.xml. This configuration file (transitively) includes the logback configuration files base.xml and file-appender.xml. These configuration files set a logback property LOG_FILE=/tmp/spring.log.

I guess it is best practice that file /tmp/server.log is owned by user and group ${MY_SPRING_BOOT_APPLICATION}.

Jenkins runs as user jenkins. jenkins does not have write permissions for /tmp/server.log. Therefore the JUnit tests fail when executed by Jenkins.


Solution

  • In my Spring Boot application, I have added <property name="LOG_TEMP" value="./logs"/> to 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>
    

    This way, during Maven testing, a separate logging file will be created in the current (testing) working directory.

    Props to welcor for helping out.