Java 为什么不是';t EvaluatorFilter筛选不匹配的语句?

Java 为什么不是';t EvaluatorFilter筛选不匹配的语句?,java,logback,Java,Logback,我们正在使用TOME、SLF4J和Logback。除了标准输出之外,我们的目标是将某些日志记录语句记录到数据库中(由标记确定)。以下是我们的logback配置: <?xml version="1.0" encoding="UTF-8"?> <configuration> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder>

我们正在使用TOME、SLF4J和Logback。除了标准输出之外,我们的目标是将某些日志记录语句记录到数据库中(由标记确定)。以下是我们的logback配置:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>...</encoder>
    </appender>

    <appender name="DB" class="ch.qos.logback.classic.db.DBAppender">
        <connectionSource class="ch.qos.logback.core.db.DriverManagerConnectionSource">
            <driverClass>oracle.jdbc.OracleDriver</driverClass>
            <url>...</url>
        </connectionSource>
        <filter class="ch.qos.logback.core.filter.EvaluatorFilter">
            <evaluator class="ch.qos.logback.classic.boolex.OnMarkerEvaluator">
                <marker>LOGDATABASE</marker>
            </evaluator>
        </filter>
    </appender>

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

...
oracle.jdbc.OracleDriver
...
日志数据库

但是,尽管没有设置标记,DBAppender仍会登录到数据库。为什么?

过滤器没有按预期工作,因为我没有设置“onMatch”和“onMismatch”标记。以下是可行的解决方案:

<filter class="ch.qos.logback.core.filter.EvaluatorFilter">
    <evaluator class="ch.qos.logback.classic.boolex.OnMarkerEvaluator">
        <marker>LOGDATABASE</marker>
    </evaluator>
    <onMatch>ACCEPT</onMatch>
    <onMismatch>DENY</onMismatch>
</filter>

日志数据库
接受
否认