xblueskyleng
2013-04-18 10:52 阅读 312
已采纳

mybatis3.2打印不出SQL语句

Spring3 struts2 mybatis3

JAR包:

[img]http://dl.iteye.com/upload/attachment/0083/3314/7a4ee1cd-c6be-37d5-9796-749f6d549049.png[/img]

[img]http://dl.iteye.com/upload/attachment/0083/3316/d0244429-f890-3f9d-b8f1-89b43063f434.png[/img]

Log4J配置:

[code="java"]
log4j.rootLogger=info, stdout, R
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[service] %d - %c -%-4r [%t] %-5p %c %x - %m%n

log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
log4j.appender.R.File=../logs/service.log
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=[service] %d - %c -%-4r [%t] %-5p %c %x - %m%n

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.java.sql.Connection = debug
log4j.logger.java.sql.Statement = debug
log4j.logger.java.sql.PreparedStatement = debug,R
log4j.logger.java.sql.ResultSet =debug
[/code]
发现只有当 log4j.rootLogger=debug, stdout, R 时才打印SQL语句和结果出来。如果是info就不打印了。找了很久度娘和谷哥,不知道怎么回事。。

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

10条回答 默认 最新

  • 已采纳
    Dead_Knight Dead_Knight 2013-04-19 10:32

    我把mybatis3.2的源码下载之后,把里面PooledDataSource类的log输出部分,换成log.warn之后,重新打jar包,放到项目中,日志级别改为info,如:
    [code="java"]
    log4j.rootLogger=info, stdout, R

    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=[service] %d - %c -%-4r [%t] %-5p %c %x - %m%n

    log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
    log4j.appender.R.File=../logs/service.log
    log4j.appender.R.layout=org.apache.log4j.PatternLayout
    log4j.appender.R.layout.ConversionPattern=[service] %d - %c -%-4r [%t] %-5p %c %x - %m%n

    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.java.sql.Connection = debug
    log4j.logger.java.sql.Statement = debug
    log4j.logger.java.sql.PreparedStatement = debug
    log4j.logger.java.sql.ResultSet =debug
    [/code]

    此时,info级别能够输出warn级别的日志,我的日志显示如下:
    [code="java"]
    [service] 2013-04-19 10:30:57,982 - org.apache.ibatis.datasource.pooled.PooledDataSource -0 [main] WARN org.apache.ibatis.datasource.pooled.PooledDataSource - PooledDataSource forcefully closed/removed all connections.
    [service] 2013-04-19 10:30:57,985 - org.apache.ibatis.datasource.pooled.PooledDataSource -3 [main] WARN org.apache.ibatis.datasource.pooled.PooledDataSource - PooledDataSource forcefully closed/removed all connections.
    [service] 2013-04-19 10:30:57,986 - org.apache.ibatis.datasource.pooled.PooledDataSource -4 [main] WARN org.apache.ibatis.datasource.pooled.PooledDataSource - PooledDataSource forcefully closed/removed all connections.
    [service] 2013-04-19 10:30:57,996 - org.apache.ibatis.datasource.pooled.PooledDataSource -14 [main] WARN org.apache.ibatis.datasource.pooled.PooledDataSource - PooledDataSource forcefully closed/removed all connections.
    [service] 2013-04-19 10:30:59,025 - org.apache.ibatis.datasource.pooled.PooledDataSource -1043 [main] WARN org.apache.ibatis.datasource.pooled.PooledDataSource - Created connection 22323092.
    [service] 2013-04-19 10:30:59,076 - org.apache.ibatis.datasource.pooled.PooledDataSource -1094 [main] WARN org.apache.ibatis.datasource.pooled.PooledDataSource - Returned connection 22323092 to pool.
    [/code]

    很明显,这是显示warn的日志信息了。说明mybatis3只是打印了debug级别的日志。

    点赞 评论 复制链接分享
  • iteye_5246 iteye_5246 2013-04-18 10:58

    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.java.sql.Connection=DEBUG
    log4j.logger.java.sql.Statement=DEBUG
    log4j.logger.java.sql.PreparedStatement=DEBUG
    参见:
    [url]http://blog.csdn.net/hanzhou4519/article/details/7763412[/url]

    点赞 评论 复制链接分享
  • microPAO microPAO 2013-04-18 11:02

    log4j.logger.java.sql.PreparedStatement = debug,R

    应该是这行配置的问题,把R去掉试试

    点赞 评论 复制链接分享
  • zyn010101 zyn010101 2013-04-18 11:23

    log4j.logger.java.sql.PreparedStatement = debug,stdout
    log4j.rootLogger=info, stdout,debug
    试试

    点赞 评论 复制链接分享
  • Dead_Knight Dead_Knight 2013-04-18 11:24

    我这里使用你的log4j配置,是可以打印ibatis的sql语句的,跟R没关系,因为你后面的R实际上是做了配置的。

    点赞 评论 复制链接分享
  • jinnianshilongnian jinnianshilongnian 2013-04-18 11:35

    log4j.logger.java.sql.Connection = debug,stdout

    log4j.logger.java.sql.Statement = debug,stdout
    log4j.logger.java.sql.PreparedStatement = debug,stdout
    log4j.logger.java.sql.ResultSet =debug,stdout

    这是因为你没有指定 Appender 如上即可

    点赞 评论 复制链接分享
  • guazixing guazixing 2013-04-18 13:10

    一行就可以了

    log4j.logger.java.sql=debug

    点赞 评论 复制链接分享
  • iteye_15914 iteye_15914 2013-04-18 17:05

    除了 [code="java"]
    og4j.logger.java.sql.Connection = debug,stdout

    log4j.logger.java.sql.Statement = debug,stdout
    log4j.logger.java.sql.PreparedStatement = debug,stdout
    log4j.logger.java.sql.ResultSet =debug,stdout

    [/code]

    还有可能是 你缺少slf4j-api-1.6.2.jar slf4j-log4j12-1.6.2.jar

    这两个jar包,因为mybatis 默认的日志输出 需要这两个jar包 :D

    点赞 评论 复制链接分享
  • Dead_Knight Dead_Knight 2013-04-19 10:14

    你的问题我知道为何了。
    因为mybatis源码中只输出了debug级别的日志,没有info级别的日志。所以你定义info级别没有输出任何信息。

    点赞 评论 复制链接分享
  • rkikbs rkikbs 2013-04-22 17:07

    最近也在苦恼这个问题。终于找到答案了。
    自己的项目已经可以打印SQL了
    mybatis使用的是 slf4j 做的日志。在你的jar文件中添加slf4j-log4j12的jar文件就好了。
    参见:http://wenku.baidu.com/view/d409554be518964bcf847cf4.html

    点赞 评论 复制链接分享

相关推荐