Search code examples
logginglogback

Which is the difference between logger level and threshold filter level in Logback?


I have an appender with a ThreshholdFilter with level INFO:

<appender name="my_apender" class="com.my.apender.MyAppender">
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
        <level>INFO</level>
    </filter>
</appender>

and a logger with level INFO, too:

<logger name="whatever" level="INFO">
    <appender-ref ref="my_appender"/>
</logger>

Which is the difference between both levels?


Solution

  • The level assigned for the logger is the one used by your logger, whereas the level assigned inside the filter ch.qos.logback.classic.filter.ThresholdFilter is the level from which this appender will be logging stuff, for more details.

    Here is an example to clarify things :

    <!-- deny all events with a level below INFO, that is TRACE and DEBUG -->
    <appender name="my_apender1" class="com.my.apender.MyAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>
    </appender>
    
    <!-- deny all events with a level below DEBUG, that is TRACE-->
    <appender name="my_apender2" class="com.my.apender.MyAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>DEBUG</level>
        </filter>
    </appender>
    
    <!-- event with level DEBUG will be handled only by my_apender2, and events with higher levels than DEBUG will be handled by both appenders -->
    <logger name="whatever" level="DEBUG">
        <appender-ref ref="my_appender1"/>
        <appender-ref ref="my_appender2"/>
    </logger>