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就不打印了。找了很久度娘和谷哥,不知道怎么回事。。
我把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级别的日志。
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去掉试试
log4j.logger.java.sql.PreparedStatement = debug,stdout
log4j.rootLogger=info, stdout,debug
试试
我这里使用你的log4j配置,是可以打印ibatis的sql语句的,跟R没关系,因为你后面的R实际上是做了配置的。
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 如上即可
一行就可以了
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
你的问题我知道为何了。
因为mybatis源码中只输出了debug级别的日志,没有info级别的日志。所以你定义info级别没有输出任何信息。
最近也在苦恼这个问题。终于找到答案了。
自己的项目已经可以打印SQL了
mybatis使用的是 slf4j 做的日志。在你的jar文件中添加slf4j-log4j12的jar文件就好了。
参见:http://wenku.baidu.com/view/d409554be518964bcf847cf4.html