0
votes

I have a Spring Boot application which was logging all output to the console by default. In my project I have a need where a number of classes are required to log their output to separate log files to make logging and debugging issues easier. To do this I've created the following logback.xml file;

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

    <property name="LOGS_HOME" value="/tmp/sflogs/" />

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.classic.PatternLayout">
            <Pattern>
                %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
            </Pattern>
        </layout>
    </appender>

    <appender name="TUMBLR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOGS_HOME}tumblr.log</file>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <Pattern>
                %d{yyyy-MM-dd HH:mm:ss} %-5level - %msg%n
            </Pattern>
        </encoder>

        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- rollover daily -->
            <fileNamePattern>${LOGS_HOME}tumblr.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
    </appender>

    <appender name="SCHEDULER_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOGS_HOME}scheduler.log</file>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <Pattern>
                %d{yyyy-MM-dd HH:mm:ss} %-5level - %msg%n
            </Pattern>
        </encoder>

        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- rollover daily -->
            <fileNamePattern>${LOGS_HOME}scheduler.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
    </appender>

    <logger name="com.supafanz.controllers.TaskController" level="info" additivity="false">
        <appender-ref ref="SCHEDULER_FILE" />
    </logger>

    <logger name="com.supafanz.parsers.TumblrParser" level="info" additivity="false">
        <appender-ref ref="TUMBLR_FILE" />
    </logger>

</configuration>

This works fine and the additional log files are being created, however in applying this Spring Boot no longer outputs it's usual output to the console.

Would someone be able to confirm how I go about re-instating the standard console logs using the logback.xml file?

1

1 Answers

1
votes

You need to run somewhere "STDOUT" like you run "SCHEDULER_FILE" or "TUMBLR_FILE":

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <layout class="ch.qos.logback.classic.PatternLayout">
        <Pattern>
            %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
        </Pattern>
    </layout>
</appender>

You can use root level:

<root>
    <appender-ref ref="STDOUT" />
</root>

Or append to "SCHEDULER_FILE" or "TUMBLR_FILE":

<logger name="com.supafanz.controllers.TaskController" level="info" additivity="false">
    <appender-ref ref="SCHEDULER_FILE" />
    <appender-ref ref="STDOUT" />
</logger>

<logger name="com.supafanz.parsers.TumblrParser" level="info" additivity="false">
    <appender-ref ref="TUMBLR_FILE" />
    <appender-ref ref="STDOUT" />
</logger>