mybatis3.2打印不出SQL语句

问题描述

Spring3 struts2 mybatis3JAR包:Log4J配置:log4j.rootLogger=info, stdout, Rlog4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=[service] %d - %c -%-4r [%t] %-5p %c %x - %m%nlog4j.appender.R=org.apache.log4j.DailyRollingFileAppenderlog4j.appender.R.File=../logs/service.loglog4j.appender.R.layout=org.apache.log4j.PatternLayoutlog4j.appender.R.layout.ConversionPattern=[service] %d - %c -%-4r [%t] %-5p %c %x - %m%nlog4j.logger.com.ibatis = debuglog4j.logger.com.ibatis.common.jdbc.SimpleDataSource = debuglog4j.logger.com.ibatis.common.jdbc.ScriptRunner = debuglog4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate = debuglog4j.logger.java.sql.Connection = debuglog4j.logger.java.sql.Statement = debuglog4j.logger.java.sql.PreparedStatement = debug,Rlog4j.logger.java.sql.ResultSet =debug发现只有当 log4j.rootLogger=debug, stdout, R 时才打印SQL语句和结果出来。如果是info就不打印了。找了很久度娘和谷哥,不知道怎么回事。。

解决方案

我把mybatis3.2的源码下载之后,把里面PooledDataSource类的log输出部分,换成log.warn之后,重新打jar包,放到项目中,日志级别改为info,如:log4j.rootLogger=info, stdout, Rlog4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=[service] %d - %c -%-4r [%t] %-5p %c %x - %m%nlog4j.appender.R=org.apache.log4j.DailyRollingFileAppenderlog4j.appender.R.File=../logs/service.loglog4j.appender.R.layout=org.apache.log4j.PatternLayoutlog4j.appender.R.layout.ConversionPattern=[service] %d - %c -%-4r [%t] %-5p %c %x - %m%nlog4j.logger.com.ibatis = debuglog4j.logger.com.ibatis.common.jdbc.SimpleDataSource = debuglog4j.logger.com.ibatis.common.jdbc.ScriptRunner = debuglog4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate = debuglog4j.logger.java.sql.Connection = debuglog4j.logger.java.sql.Statement = debuglog4j.logger.java.sql.PreparedStatement = debuglog4j.logger.java.sql.ResultSet =debug此时,info级别能够输出warn级别的日志,我的日志显示如下:[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.很明显,这是显示warn的日志信息了。说明mybatis3只是打印了debug级别的日志。
解决方案二:
最近也在苦恼这个问题。终于找到答案了。自己的项目已经可以打印SQL了mybatis使用的是 slf4j 做的日志。在你的jar文件中添加slf4j-log4j12的jar文件就好了。参见:http://wenku.baidu.com/view/d409554be518964bcf847cf4.html
解决方案三:
你的问题我知道为何了。因为mybatis源码中只输出了debug级别的日志,没有info级别的日志。所以你定义info级别没有输出任何信息。
解决方案四:
除了 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 还有可能是 你缺少slf4j-api-1.6.2.jar slf4j-log4j12-1.6.2.jar这两个jar包,因为mybatis 默认的日志输出 需要这两个jar包
解决方案五:
一行就可以了log4j.logger.java.sql=debug
解决方案六:
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配置,是可以打印ibatis的sql语句的,跟R没关系,因为你后面的R实际上是做了配置的。
解决方案八:
log4j.logger.java.sql.PreparedStatement = debug,stdoutlog4j.rootLogger=info, stdout,debug试试
解决方案九:
log4j.logger.java.sql.PreparedStatement = debug,R 应该是这行配置的问题,把R去掉试试
解决方案十:
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参见:http://blog.csdn.net/hanzhou4519/article/details/7763412

时间: 2024-10-26 18:58:25

mybatis3.2打印不出SQL语句的相关文章

用log4j打印mybatis 连接数据库SQL语句无法打印,用的是c3po连接池

问题描述 用log4j打印mybatis 连接数据库SQL语句无法打印,用的是c3po连接池 log4j配置如下: log4j.rootLogger=info, stdout,file log4j.logger.org.springframework=INFO log4j.logger.org.springframework=ERROR log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.lay

写出sql语句,获取同一表中员工重名的信息(没有跟其他表关联)

问题描述 如有一张employer表,表中每条记录用id标识,姓名是可重复的,现在是查询出本表中有哪些重名的记录??? 问题补充:hudingchen 写道 解决方案 SELECT * FROM employer WHERE name IN (SELECT name FROM employer GROUP BY name HAVING COUNT(*) > 1)解决方案二:http://wangjinlongaisong-126-com.iteye.com/blog/1455812解决方案三:h

log4j无法打印SQL语句,急求解决

问题描述 用log4j打印mybatis的SQL语句无法打印,只可打印其他log4j信息,log4j配置如下:log4j.rootLogger=DEBUG,A1,Rlog4j.appender.A1=org.apache.log4j.ConsoleAppenderlog4j.appender.A1.Target=System.outlog4j.appender.A1.layout=org.apache.log4j.PatternLayoutlog4j.appender.A1.layout.Con

查询mysql中执行效率低的sql语句的方法_Mysql

一些小技巧1. 如何查出效率低的语句?在MySQL下,在启动参数中设置 --log-slow-queries=[文件名],就可以在指定的日志文件中记录执行时间超过long_query_time(缺省为10秒)的SQL语句.你也可以在启动配置文件中修改long query的时间,如: 复制代码 代码如下:  # Set long query time to 8 seconds    long_query_time=8 2. 如何查询某表的索引?可使用SHOW INDEX语句,如: 复制代码 代码如

SQL语句性能调整原则

性能|语句 一.问题的提出在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的的编写等体会不出SQL语句各种写法的性能优劣,但是如果将应用系统提交实际应用后,随着数据库中数据的增加,系统的响应速度就成为目前系统需要解决的最主要的问题之一.系统优化中一个很重要的方面就是SQL语句的优化.对于海量数据,劣质SQL语句和优质SQL语句之间的速度差别可以达到上百倍,可见对于一个系统不是简单地能实现其功能就可,而是要写出高质量的SQL语句,提高系统的可用性. 在多数情况下,Orac

SQL语句的自动优化

优化|语句 在数据库应用系统中编写可执行的SQL语句可以有多种方式实现,但哪一条是最佳方案却难以确定.为了解决这一问题,有必要对SQL实施优化.简单地说,SQL语句的优化就是将性能低下的SQL语句转换成达到同样目的的性能更好的SQL语句. 优化SQL语句的原因 数据库系统的生命周期可以分成: 设计.开发和成品三个阶段.在设计阶段进行优化的成本最低,收益最大.在成品阶段进行优化的成本最高,收益最小.如果将一个数据库系统比喻成一座楼房,在楼房建好后进行矫正往往成本很高而收效很小(甚至可能根本无法矫正

智能SQL优化工具--SQL Optimizer for SQL Server(帮助提升数据库应用程序性能,最大程度地自动优化你的SQL语句 )

原文:智能SQL优化工具--SQL Optimizer for SQL Server(帮助提升数据库应用程序性能,最大程度地自动优化你的SQL语句 ) SQL Optimizer for SQL Server 帮助提升数据库应用程序性能,最大程度地自动优化你的SQL语句   SQL Optimizer for SQL Server 让 SQL Server DBA或者T-SQL开发人员能够主动地识别潜在的SQL性能问题,通过扫描和分析SQL语句进行人工智能自动SQL优化.Dell SQL Opt

SQL语句优化提高数据库性能_MsSql

性能不理想的系统中除了一部分是因为应用程序的负载确实超过了服务器的实际处理能力外,更多的是因为系统存在大量的SQL语句需要优化.为了获得稳定的执行性能,SQL语句越简单越好.对复杂的SQL语句,要设法对之进行简化. 常见的简化规则如下: 1)不要有超过5个以上的表连接(JOIN) 2)考虑使用临时表或表变量存放中间结果 3)少用子查询 4)视图嵌套不要过深,一般视图嵌套不要超过2个为宜 一.问题的提出 在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的的编写等体会不出S

oracle导出sql语句的结果集和保存执行的sql语句(深入分析)_oracle

spool--导出sql语句结果集 SQL>spool c:\testsql.sqlSQL>SELECT * FROM table_name;SQL>spool off; sav--保存执行的sql语句 SQL>SELECT * FROM table_name;SQL>sav c:\test.sql;