多级别过滤器

<configuration>

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <!-- encoders are assigned the type ch.qos.logback.classic.encoder.PatternLayoutEncoder 
            by default -->
        <encoder>
            <pattern>%d{HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
            </pattern>
        </encoder>
    </appender>


    <logger name="cn.zno" level="WARN" />

    <root level="INFO">
        <appender-ref ref="STDOUT" />
    </root>
</configuration>

1. <logger name="cn.zno" level="WARN" />

作用是配置Logger类,在调用.trace .debug 等信息时进行拦截

class TestLogback {
    private final Logger logger = LoggerFactory.getLogger(getClass());

    public void printLog() {
        logger.trace("It is trace");
        logger.debug("It is debug");
        logger.info("It is info");
        logger.warn("It is warn");
        logger.error("It is error");
    }

}

依据以下代码 位于ch.qos.logback.classic.Logger.class :

if (effectiveLevelInt > level.levelInt) {
        return;
      }

effectiveLevelInt 可能的值是 5000 、10000 、20000 、30000 、40000 

分别对应5个级别:               trace 、debug 、info 、warn 、error 

<logger name="cn.zno" level="WARN" /> 比如 WARN 值为30000 ,大于info debug trace ,则只会输出 warn error

2.  <root level="" />

只能有一个root ,可被多个 appender 继承,可以影响effectiveLevelInt 的值,以<logger 为主

如果把<root 视为 父类,那么 <logger 就是子类

如果子类没有指定该值,则以父类为准

如果子类指定了该值,则以子类为准

原文地址:https://www.cnblogs.com/zno2/p/4800141.html