为什么EvaluatorFilter不能过滤不匹配的语句?

时间:2014-10-30 15:10:19

标签: java logback

我们正在使用TomEE,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>

但是,虽然未设置标记,但DBAppender会记录到数据库。为什么呢?

1 个答案:

答案 0 :(得分:2)

过滤器没有按预期工作,因为我没有设置&#34; onMatch&#34;和&#34; onMismatch&#34;标签。这是工作解决方案:

<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>