2016年9月5日星期一

org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug

这个一直输出,就算定义了
    <logger name="org.apache.ibatis.logging.jdbc.BaseJdbcLogger">
        <level value="info" />
    </logger>
也没用,查了一下,

别人也遇到这个问题,
http://stackoverflow.com/questions/27772563/why-mybatis-force-prints-log4j-debug-info-to-the-console

解决法子是将mapper的logger定义为info就可以。
看BaseJdbcLogger的源码,可以知道里面的log不是自己的,而是构造函数里面传递进去的
protected Log statementLog;

  public BaseJdbcLogger(Log log, int queryStack) {
    this.statementLog = log;
    if (queryStack == 0) {
      this.queryStack = 1;
    } else {
      this.queryStack = queryStack;
    }
  }
这就是原因了。

这里也碰到一个问题,就是loggername是否支持wildchar的事情
因为我的mapper不是在一个包下,而是在各个repository自己的目录下,比如,没有这样的定义
    <logger name="xiu.domain.repository.*.*Mapper">
        <level value="info" />
    </logger> 
找了找,发现logback有filter功能,于是这样来搞
http://logback.qos.ch/manual/filters.html

         <filter class="ch.qos.logback.core.filter.EvaluatorFilter">  
          <evaluator>          
            <matcher>  
              <Name>mapper</Name>     
              <regex>xiu\.domain\.repository\..+\.\w*Mapper</regex>  
            </matcher>                 
            <expression>mapper.matches(logger)</expression>  
          </evaluator>  
          <OnMismatch>NEUTRAL</OnMismatch>  
          <OnMatch>DENY</OnMatch>  
        </filter>  

没有评论:

发表评论