Abdull
Abdull

Reputation: 27832

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.

Upvotes: 15

Views: 13731

Answers (3)

Dahar Youssef
Dahar Youssef

Reputation: 479

If the permissions are insufficient, you can modify them using the chmod command:

 chmod +r /tmp/spring.log

Upvotes: 0

mowwwalker
mowwwalker

Reputation: 17344

We were experiencing an issue where running multiple Spring Boot modules on the same server was causing multiple processes to try to write to /tmp/spring.log. We solved this by updating logback-spring.xml to include ${PID} in the log name:

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

to

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

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

Upvotes: 2

Abdull
Abdull

Reputation: 27832

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.

Upvotes: 16

Related Questions