springmvc、mybatis整合数据库语句输出问题解决

项目整合Spring3和MyBatis3时,遇到控制台无法显示SQL语句的问题。尝试修改Log4j配置无效,错误提示涉及logger初始化。解决方案在于调整web.xml中Listener的加载顺序,确保org.springframework.web.util.Log4jConfigListener在org.springframework.web.context.ContextLoader之前加载,从而正确读取log4j.properties文件,实现SQL语句的打印。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目使用Spring3+MyBatis3整合,但是控制台就是部署出SQL语句,网上找了很多资料,都说是Log4j配置文件的问题,修改了N 边Log4j配置文件依然无效。

除了SQL 语句,其他都能显示,但是sql语句一直不会显示出发火

我的properties文件:

log4j.rootLogger=ERROR, stdout, CONSOLE,logFile


log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p [%t] %c %x - %m%n

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n

log4j.appender.logFile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.logFile.encoding=UTF-8
log4j.appender.logFile.file=${catalina.home}/logs/childWatchApi.log
log4j.appender.logFile.layout=org.apache.log4j.PatternLayout
log4j.appender.logFile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n

 #sql #
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
log4j.logger.java.sql.ResultSet=DEBUG

 #spring #
log4j.logger.org.springframework.transaction.interceptor.TransactionInterceptor = DEBUG

 #ibatis #
log4j.logger.com.ibatis=DEBUG
log4j.logger.com.ibatis.jdbc.ScriptRunner=ERROR

log4j.logger.net.sf.ehcache.util=DEBUG
log4j.logger.org.mybatis.caches.ehcache.LoggingEhcache=DEBUG


后来在网上找个很多原因:都是说properties文件问题,或者引入的jar有问题

继续寻找答案在 http://blog.youkuaiyun.com/zht666/article/details/9042373找到了

查看自己启动时也会出现

log4j:WARN No appenders could be found for logger (org.springframework.web.context.ContextLoader). 
log4j:WARN Please initialize the log4j system properly.

借用一下:

这个提示应该是读入web应用程序的log4j.properties文件之前就报出来了。是在加载org.springframework.web.context.ContextLoader这个listener的时候没找到log4j的配置文件造成的。

仔细查看web.xml发现在加载org.springframework.web.context.ContextLoader这个listener之后才加载org.springframework.web.util.Log4jConfigListener,把log4j的配置放到org.springframework.web.context.ContextLoader之前,就可以解决这个问题了。

于是,我在web.xml配置文件中加入Log4j的配置,部分配置文件如下

解决方法:

<context-param>    
    <param-name>log4jConfigLocation</param-name>    
    <param-value>classpath:log4j.properties</param-value>    
  </context-param>    
  <context-param>    
    <param-name>log4jRefreshInterval</param-name>    
    <param-value>60000</param-value>    
  </context-param>  

最后终于打印出了sql执行语句:

2015-07-04 15:10:48 DEBUG [http-8080-2] java.sql.Connection  - ooo Using Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@41aff40f]
2015-07-04 15:10:48 [java.sql.Connection]-[DEBUG] ==>  Preparing: select count(*) from stone_tbl st LEFT JOIN stone_type_tbl stt on st.typeid = stt.id where 1 = 1 
2015-07-04 15:10:48 DEBUG [http-8080-2] java.sql.Connection  - ==>  Preparing: select count(*) from stone_tbl st LEFT JOIN stone_type_tbl stt on st.typeid = stt.id where 1 = 1 
2015-07-04 15:10:48 [java.sql.PreparedStatement]-[DEBUG] ==> Parameters: 
2015-07-04 15:10:48 DEBUG [http-8080-2] java.sql.PreparedStatement  - ==> Parameters: 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值