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个回答

我把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级别的日志。

Dead_Knight
Dead_Knight 那你就把mybatis源码下载之后,把里面的打印sql语句的地方改为warn输出,只是开发引用的jar。不影响生产环境
大约 7 年之前 回复
xblueskyleng
xblueskyleng 主要是项目初建,想看到SQL。debug的日志太多了。眼神不好,SQL语句都看不见。
大约 7 年之前 回复
Dead_Knight
Dead_Knight 一般debug是在开发调试阶段使用的。你在生产环节不都是用info级别了么?
大约 7 年之前 回复
xblueskyleng
xblueskyleng 非常感谢。 也就是说想显示SQL,就一定得DEBUG级别? DEBUG日志比裹脚布还长,那显示和没显示没什么分别。。
大约 7 年之前 回复

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]

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

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

xblueskyleng
xblueskyleng 去掉,或者,换成stdout都不行,只有debug级别才会打印日志。
大约 7 年之前 回复

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

xblueskyleng
xblueskyleng 不行。。方向估计不是在配置文件上了。
大约 7 年之前 回复

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

xblueskyleng
xblueskyleng 是mybatis吗?版本多少的?
大约 7 年之前 回复

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 如上即可

jinnianshilongnian
jinnianshilongnian 你打成war包 看看jar包有没有重复
大约 7 年之前 回复
xblueskyleng
xblueskyleng 这种我是试过的,不行 ╮(╯﹏╰)╭ 我以前是用ibatis的,配置就是我发出来的那样,可以打印。但换了mybatis就不行了,我现在在想可能是包冲突,还是框架搭得不对。 debug才会打印SQL,实在是想不出为什么,我看别人的项目info也是可以打的,只是Spring和mybatis的版本不一样。
大约 7 年之前 回复

一行就可以了

log4j.logger.java.sql=debug

除了 [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

ileson
Leson_Yin 我的是缺 slf4j-log4j12 .jar 包。
大约 6 年之前 回复
ileson
Leson_Yin 谢谢解决了我的问题!!!!
大约 6 年之前 回复
xblueskyleng
xblueskyleng 我尝试过很多方法,加了这两个,还有删了这两个都试过了。应该是楼上那位大神的说法,是mybatis3.2没打印info
大约 7 年之前 回复

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

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

haorengoodman
haorengoodman jar,配置文件,都按照上面说的,为什么还是打印不出来sql语句呢?求解就
6 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问