Search code examples
logbackspring-boot

How to disable logback ConsoleAppender in Spring Boot


I am building a command line application using Spring Boot. In such an application, logback console logging is not appropriate. How can I completely disable the console appender, but still have the file appender working with the default Spring Boot support?

Update

I have created a feature request for simpler support of this feature here:

https://github.com/spring-projects/spring-boot/issues/1612


Solution

  • Just add a file called logback.xml in src/main/resources with content like (copied verbatim except for console part from Spring Boot's source):

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
    
    
        <property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}/}spring.log}"/>
        <property name="FILE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %5p ${PID:- } [%t] --- %-40.40logger{39} : %m%n%wex"/>
    
        <appender name="FILE"
                  class="ch.qos.logback.core.rolling.RollingFileAppender">
            <encoder>
                <pattern>${FILE_LOG_PATTERN}</pattern>
            </encoder>
            <file>${LOG_FILE}</file>
            <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
                <fileNamePattern>${LOG_FILE}.%i</fileNamePattern>
            </rollingPolicy>
            <triggeringPolicy
                    class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
                <MaxFileSize>10MB</MaxFileSize>
            </triggeringPolicy>
        </appender>
    
        <root level="INFO">
            <appender-ref ref="FILE" />
        </root>
    
    </configuration>
    

    Note that

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

    is needed in order to support setting the log file from Spring Boot's logging.file and logging.path.

    If all you want to do is set some standard log file, you could set place it's path in property above.

    Update (02-04-2015)

    In newer versions of Spring Boot you can easily just include the base.xml from Spring Boot and create the following logback.xml.

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <include resource="org/springframework/boot/logging/logback/base.xml" />
    
        <root level="INFO">
            <appender-ref ref="FILE" />
        </root>
    </configuration>
    

    Update (15-09-2017)

    In order to get this working on Spring Boot 1.5.x and 2.0.0.M4 I added a file called logback-spring.xml and added it in the resources directory. The file could look like this

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
    
    
        <property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}/}spring.log}"/>
        <property name="FILE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %5p ${PID:- } [%t] --- %-40.40logger{39} : %m%n"/>
    
        <appender name="FILE"
                  class="ch.qos.logback.core.rolling.RollingFileAppender">
            <encoder>
                <pattern>${FILE_LOG_PATTERN}</pattern>
            </encoder>
            <file>${LOG_FILE}</file>
            <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
                <fileNamePattern>${LOG_FILE}.%i</fileNamePattern>
            </rollingPolicy>
            <triggeringPolicy
                    class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
                <MaxFileSize>10MB</MaxFileSize>
            </triggeringPolicy>
        </appender>
    
        <root level="INFO">
            <appender-ref ref="FILE" />
        </root>
    
    </configuration>