2014-10-30 76 views
1

我们使用TomEE,SLF4J和Logback。除了stdout之外,我们的目标是将某些日志记录记录到数据库中(由标记确定)。这里是我们的logback配置:为什么不是EvaluatorFilter过滤不匹配的语句?

<?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会记录到数据库。为什么?

回答

2

过滤器没有按预期工作,因为我没有设置“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>