slf4j的no applicable action for [onMismatch]错误

时间:2024-06-03 09:29:21


logback.xml配置文件的坑爹错误,先看代码(只看重点)

不会报错的:

<appender name="CONSOLE_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <!-- 文件路径 -->
    <file>${DEV_FILE_PATH}/error.log</file>
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
        <level>ERROR</level>
        <onMatch>ACCEPT</onMatch>

    </filter>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <!-- 文件名称 -->
        <fileNamePattern>${DEV_FILE_PATH}/error.%d{yyyy-MM-dd}.log</fileNamePattern>
        <!-- 文件最大保存历史数量 -->
        <MaxHistory>50</MaxHistory>
    </rollingPolicy>

    <layout class="ch.qos.logback.classic.PatternLayout">
        <pattern>${PATTERN}</pattern>
    </layout>
</appender><appender name="CONSOLE_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">

会报错的:

    <!-- 文件路径 -->
    <file>${TEST_FILE_PATH}/error.log</file>
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
        <level>ERROR</level>
        <onMatch>ACCEPT</onMatch>
        <onMisMatch>DENY</onMisMatch>
    </filter>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <!-- 文件名称 -->
        <fileNamePattern>${TEST_FILE_PATH}/error.%d{yyyy-MM-dd}.log</fileNamePattern>
        <!-- 文件最大保存历史数量 -->
        <MaxHistory>50</MaxHistory>
    </rollingPolicy>

    <layout class="ch.qos.logback.classic.PatternLayout">
        <pattern>${PATTERN}</pattern>
    </layout>
</appender>

就是因为多了个<onMisMatch>DENY</onMisMatch>。

总结:

如果使用logback 那么此处需要注释 否则出现ERROR 

如果使用log4j2 那么此处需要解除注释。

问题来了,那么我们注释“<onMisMatch>DENY</onMisMatch>”时,我们怎么正确过虑日志。

现在就在来区分:<filter class="ch.qos.logback.classic.filter.LevelFilter">与<filter class="ch.qos.logback.classic.filter.ThresholdFilter">的区别了;

LevelFilter: 级别过滤器,根据日志级别进行过滤。如果日志级别等于配置级别,过滤器会根据onMath 和 onMismatch接收或拒绝日志。有以下子节点:
<level>:设置过滤级别
<onMatch>:用于配置符合过滤条件的操作

<onMismatch>:用于配置不符合过滤条件的操作

例如:将过滤器的日志级别配置为INFO,所有INFO级别的日志交给appender处理,非INFO级别的日志,被过滤掉。

<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
        <level>INFO</level>
        <onMatch>ACCEPT</onMatch>
        <onMismatch>DENY</onMismatch>
    </filter>
    <encoder>
        <pattern>
            %-4relative [%thread] %-5level %logger{30} - %msg%n
        </pattern>
    </encoder>
</appender>

ThresholdFilter: 临界值过滤器,过滤掉低于指定临界值的日志。当日志级别等于或高于临界值时,过滤器返回NEUTRAL;当日志级别低于临界值时,日志会被拒绝。
例如:过滤掉所有低于INFO级别的日志。

<appender name="CONSOLE"
          class="ch.qos.logback.core.ConsoleAppender">
    <!-- 过滤掉 TRACE 和 DEBUG 级别的日志-->
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
        <level>INFO</level>
    </filter>
    <encoder>
        <pattern>
            %-4relative [%thread] %-5level %logger{30} - %msg%n
        </pattern>
    </encoder>
</appender>

如果您在编写java过程中有出现问题,如果不嫌弃小编我学历浅薄,欢迎添加我的微信一起讨论,感谢您的支持!微信号:atgeretg
大神您觉得还可以的话请您打赏,您的十分满意是小编的无限动力。

slf4j的no applicable action for [onMismatch]错误