Search code examples
xmlspringlogback

How to configure logback to log separate packages into separate log files?


My log has to be separated into separate files based on packages. So, Spring exceptions have to be written into spring.log, DAO exceptions into dao.log, Service exceptions into service.log, and Apache Tomcat into server.log.

At this time, only spring.log is being written. How could I fix this so that all the four log files were written?

<configuration scan="true">

    <appender name="daoLog"
        class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>logs/dao.log</file>
        <rollingPolicy
            class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>logFile.%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>30</maxHistory>
        </rollingPolicy>

        <triggeringPolicy
            class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <maxFileSize>5MB</maxFileSize>
        </triggeringPolicy>

        <encoder>
            <charset>UTF-8</charset>
            <pattern>%d %-4relative [%thread] %-5level %logger{35} - %msg%n
            </pattern>
        </encoder>
    </appender>

    <appender name="serviceLog"
        class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>logs/service.log</file>

        <rollingPolicy
            class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>logFile.%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>30</maxHistory>
        </rollingPolicy>

        <triggeringPolicy
            class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <maxFileSize>5MB</maxFileSize>
        </triggeringPolicy>

        <encoder>
            <charset>UTF-8</charset>
            <pattern>%d %-4relative [%thread] %-5level %logger{35} - %msg%n
            </pattern>
        </encoder>
    </appender>

    <appender name="springLog"
        class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>logs/spring.log</file>

        <rollingPolicy
            class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>logFile.%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>30</maxHistory>
        </rollingPolicy>

        <triggeringPolicy
            class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <maxFileSize>5MB</maxFileSize>
        </triggeringPolicy>

        <encoder>
            <charset>UTF-8</charset>
            <pattern>%d %-4relative [%thread] %-5level %logger{35} - %msg%n
            </pattern>
        </encoder>
    </appender>

    <appender name="serverLog"
        class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>logs/server.log</file>

        <rollingPolicy
            class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>logFile.%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>30</maxHistory>
        </rollingPolicy>

        <triggeringPolicy
            class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <maxFileSize>5MB</maxFileSize>
        </triggeringPolicy>

        <encoder>
            <charset>UTF-8</charset>
            <pattern>%d %-4relative [%thread] %-5level %logger{35} - %msg%n
            </pattern>
        </encoder>
    </appender>

    <logger name="com.example.dao">
        <appender-ref ref="daoLog" />
    </logger>

    <logger name="com.example.service">
        <appender-ref ref="serviceLog" />
    </logger>

    <logger name="org.springframework">
        <appender-ref ref="springLog" />
    </logger>

    <logger name="org.apache.tomcat">
        <appender-ref ref="serverLog" />
    </logger>

</configuration>


Solution

  • Your configuration looks correct. The issue could be coming from the place where you are logging the message. The only missing piece is the log level, if you are not declaring it, the default is info level. You need to make sure you are logging it in correct level from your code.