这个一直输出,就算定义了
<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>
没有评论:
发表评论