Mybatis日志信息

问题:开发组说MyBatis的日志信息只能通过顶级日志记录器在debug下打印SQL,所以测试时一大堆的信息,弄得个单元测试,启动要老半天。

    为了解决这样的问题,我看了下开发组的日志信息配置,代码如下:

log4j.logger.com.ibatis=DEBUG
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG
log4j.logger.org.mybatis=DEBUG
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
log4j.logger.java.sql.ResultSet=DEBUG

问了下Google,全大部分都是上面这样配置的,我在想这样错误的配置,居然还被转载这么多次数,这个世界,用脑子在开发的人到底剩多少;在这里做一个简单的说明,详细的,可以到log4j的官网看看

这里讲两点log4j的基础知识

1、默认log4j的日志信息会被传播到父日志里面去的,比如:

org.abc.A1 打印信息:2014-10-30 xxxxxx

org.abc作为org.abc.A1的父日志,同样也会打印:2014-10-30 xxxxxx,如果想不被继承传播打印,可以使用additivity=false来禁止掉,也可以通过提高父日志记录器的日志级别

2、全大部分的开源或者说开发中,默认定义日志的方式是类似LoggerFactory.geLogger(XXX.class)方式,这样就意味着日志记录器的名称为类的全名称。

    而在mybatis中,打印sql的日志命名是按照你指定那条sql所在xml的命名空间+点号+id(方法名)构成的,而一般的命名空间是你生成的Mapper类的全名称。

    所以mybatis的日志记录器即不是org.apache.ibatis也不是java.sql,而是你自己定义的mapper名加上方法名,所以如果你想打印mybatis的运行时SQL信息,可以如下方式:

粗粒度控制 所有的命名空间相同的前缀作为日志记录器名 比如定义:

log4j.logger.com.xxx.mapper=DEBUG, stdout

细粒度控制 可以针对某个命名空间作为日志记录器名 比如定义:

log4j.logger.com.xxx.mapper.UserMapper=DEBUG, stdout

更细粒度控制 可以定义为命名空间加上id作为指定的某条sql的日志记录器 比如定义:

log4j.logger.com.xxx.mapper.UserMapper.selectAll=DEBUG, stdout

写完这篇后,在mybatis的官网上面看到人家都已经简单说明啦,移步到http://mybatis.github.io/mybatis-3/zh/logging.html

转载于:https://my.oschina.net/xdev/blog/338670

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值