`

mybatis和spring3整合,控制台输出sql语句.

阅读更多

391人阅读 评论(0) 收藏 举报

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

除了SQL 语句,其他都能显示,纠结的很抓狂发火

我的Log4j的配置文件如下

 

  1. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <!DOCTYPElog4j:configurationSYSTEM"http://toolkit.alibaba-inc.com/dtd/log4j/log4j.dtd">
  3. <log4j:configurationxmlns:log4j='http://jakarta.apache.org/log4j/'>
  4. <!--=====================================================================-->
  5. <!--定义全局输出适配器-->
  6. <!--=====================================================================-->
  7. <appendername="consoleAppender"class="org.apache.log4j.ConsoleAppender">
  8. <layoutclass="org.apache.log4j.PatternLayout">
  9. <paramname="ConversionPattern"value="[%d{yyyy-MM-ddHH:mm:ss.SSS}]-[%c]-[%t]%x-%m%n"/>
  10. </layout>
  11. </appender>
  12. <!--MybatisandSQL-->
  13. <loggername="org.apache.ibatis"additivity="true">
  14. <levelvalue="DEBUG"/>
  15. <appender-refref="consoleAppender"/>
  16. </logger>
  17. <loggername="org.mybatis.spring"additivity="true">
  18. <levelvalue="ERROR"/>
  19. <appender-refref="consoleAppender"/>
  20. </logger>
  21. <loggername="java.sql"additivity="true">
  22. <levelvalue="DEBUG"/>
  23. <appender-refref="consoleAppender"/>
  24. </logger>
  25. <loggername="java.sql.Connection"additivity="true">
  26. <levelvalue="DEBUG"/>
  27. <appender-refref="consoleAppender"/>
  28. </logger>
  29. <loggername="java.sql.Statement"additivity="true">
  30. <levelvalue="DEBUG"/>
  31. <appender-refref="consoleAppender"/>
  32. </logger>
  33. <loggername="java.sql.PreparedStatement"additivity="true">
  34. <levelvalue="DEBUG"/>
  35. <appender-refref="consoleAppender"/>
  36. </logger>
  37. <!--Spring-->
  38. <loggername="org.springframework"additivity="true">
  39. <levelvalue="ERROR"/>
  40. <appender-refref="consoleAppender"/>
  41. </logger>
  42. <!--ActiveMQ-->
  43. <loggername="org.apache.activemq"additivity="true">
  44. <levelvalue="ERROR"/>
  45. <appender-refref="consoleAppender"/>
  46. </logger>
  47. <!--=====================================================================-->
  48. <!--根日志记录器-->
  49. <!--=====================================================================-->
  50. <root>
  51. <levelvalue="DEBUG"/>
  52. <appender-refref="consoleAppender"/>
  53. </root>
  54. </log4j:configuration>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "http://toolkit.alibaba-inc.com/dtd/log4j/log4j.dtd">
<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>
    <!-- ===================================================================== -->
    <!--  定义全局输出适配器                                                      -->
    <!-- ===================================================================== -->
    <appender name="consoleAppender" class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss.SSS}]-[%c]-[%t] %x - %m%n"/>
        </layout>
    </appender>

    <!-- Mybatis and SQL -->
    <logger name="org.apache.ibatis" additivity="true">
        <level value="DEBUG"/>
        <appender-ref ref="consoleAppender"/>
    </logger>

    <logger name="org.mybatis.spring" additivity="true">
        <level value="ERROR"/>
        <appender-ref ref="consoleAppender"/>
    </logger>
    <logger name="java.sql" additivity="true">
        <level value="DEBUG"/>
        <appender-ref ref="consoleAppender"/>
    </logger>

    <logger name="java.sql.Connection" additivity="true">
        <level value="DEBUG"/>
        <appender-ref ref="consoleAppender"/>
    </logger>

    <logger name="java.sql.Statement" additivity="true">
        <level value="DEBUG"/>
        <appender-ref ref="consoleAppender"/>
    </logger>

    <logger name="java.sql.PreparedStatement" additivity="true">
        <level value="DEBUG"/>
        <appender-ref ref="consoleAppender"/>
    </logger>

    <!-- Spring -->
    <logger name="org.springframework" additivity="true">
        <level value="ERROR"/>
        <appender-ref ref="consoleAppender"/>
    </logger>

    <!-- ActiveMQ -->
    <logger name="org.apache.activemq" additivity="true">
        <level value="ERROR"/>
        <appender-ref ref="consoleAppender"/>
    </logger>
    <!-- ===================================================================== -->
    <!--  根日志记录器                                                          -->
    <!-- ===================================================================== -->
    <root>
        <level value="DEBUG"/>
        <appender-ref ref="consoleAppender"/>
    </root>
</log4j:configuration>

 

最后,仔细查看启动时的输入发现了如下的错误提示

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

于是,我想是不是这个地方出问题了呢,赶紧上网搜索解决这个问题的资料。网上找到一个解释:

地址:http://lveyo.iteye.com/blog/418376

这个提示应该是读入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的配置,部分配置文件如下

 

  1. <!--Log4j配置-->
  2. <context-param>
  3. <param-name>log4jConfigLocation</param-name>
  4. <param-value>/WEB-INF/log4j.xml</param-value>
  5. </context-param>
  6. <context-param>
  7. <param-name>log4jRefreshInterval</param-name>
  8. <param-value>60000</param-value>
  9. </context-param>
  10. <listener>
  11. <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
  12. </listener>
  13. <!--扫描spring配置文件-->
  14. <context-param>
  15. <param-name>contextConfigLocation</param-name>
  16. <param-value>classpath:spring/application-*.xml</param-value>
  17. </context-param>
  18. <!--监听器-->
  19. <listener>
  20. <listener-class>com.hanvon.iface.web.listener.WebAppEventListener</listener-class>
  21. </listener>
  22. .......
<!--Log4j配置-->
    <context-param>
        <param-name>log4jConfigLocation</param-name>
        <param-value>/WEB-INF/log4j.xml</param-value>
    </context-param>
    <context-param>
        <param-name>log4jRefreshInterval</param-name>
        <param-value>60000</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
    </listener>

    <!-- 扫描spring配置文件 -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring/application-*.xml</param-value>
    </context-param>

    <!-- 监听器 -->
    <listener>
        <listener-class>com.hanvon.iface.web.listener.WebAppEventListener</listener-class>
    </listener>
.......

增加了上面的Log4j配置部分后,结果真的可以打印SQL 语句了,太高兴了得意!!!

我觉得,起作用的主要是下面的配置内容,这个配置正确设置了Log4j:

 

  1. <context-param>
  2. <param-name>log4jConfigLocation</param-name>
  3. <param-value>/WEB-INF/log4j.xml</param-value>
  4. </context-param>
  5. <context-param>
  6. <param-name>log4jRefreshInterval</param-name>
  7. <param-value>60000</param-value>
  8. </context-param>
  9. <listener>
  10. <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
  11. </listener>
<context-param>  
    <param-name>log4jConfigLocation</param-name>  
    <param-value>/WEB-INF/log4j.xml</param-value>  
</context-param>  
<context-param>  
    <param-name>log4jRefreshInterval</param-name>  
    <param-value>60000</param-value>  
</context-param>  
<listener>  
    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>  
</listener>


 

 

部分SQL语句输出如下:

  1. [2013-06-0621:07:35.040]-[java.sql.PreparedStatement]-[http-8080-2]-==>Executing:SELECTCOUNT(DISTINCTdev.ng_id)FROMdev_devicedevWHEREdev.nt_state=?
  2. [2013-06-0621:07:35.040]-[java.sql.PreparedStatement]-[http-8080-2]-==>Executing:SELECTCOUNT(DISTINCTdev.ng_id)FROMdev_devicedevWHEREdev.nt_state=?
  3. [2013-06-0621:07:35.040]-[java.sql.PreparedStatement]-[http-8080-1]-==>Parameters:
  4. [2013-06-0621:07:35.040]-[java.sql.PreparedStatement]-[http-8080-1]-==>Parameters:
  5. [2013-06-0621:07:35.040]-[java.sql.PreparedStatement]-[http-8080-2]-==>Executing:SELECTCOUNT(DISTINCTdev.ng_id)FROMdev_devicedevWHEREdev.nt_state=?
  6. [2013-06-0621:07:35.040]-[java.sql.PreparedStatement]-[http-8080-1]-==>Parameters:
  7. [2013-06-0621:07:35.041]-[java.sql.PreparedStatement]-[http-8080-2]-==>Parameters:1(Integer)
  8. [2013-06-0621:07:35.041]-[java.sql.PreparedStatement]-[http-8080-2]-==>Parameters:1(Integer)
  9. [2013-06-0621:07:35.041]-[java.sql.PreparedStatement]-[http-8080-2]-==>Parameters:1(Integer)
  10. [2013-06-0621:07:35.079]-[java.sql.ResultSet]-[http-8080-2]-<==Columns:COUNT(DISTINCTdev.ng_id)
  11. [2013-06-0621:07:35.079]-[java.sql.ResultSet]-[http-8080-2]-<==Columns:COUNT(DISTINCTdev.ng_id)
  12. [2013-06-0621:07:35.087]-[java.sql.ResultSet]-[http-8080-2]-<==Row:11
  13. [2013-06-0621:07:35.087]-[java.sql.ResultSet]-[http-8080-2]-<==Row:11

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

除了SQL 语句,其他都能显示,纠结的很抓狂发火

我的Log4j的配置文件如下

 

  1. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <!DOCTYPElog4j:configurationSYSTEM"http://toolkit.alibaba-inc.com/dtd/log4j/log4j.dtd">
  3. <log4j:configurationxmlns:log4j='http://jakarta.apache.org/log4j/'>
  4. <!--=====================================================================-->
  5. <!--定义全局输出适配器-->
  6. <!--=====================================================================-->
  7. <appendername="consoleAppender"class="org.apache.log4j.ConsoleAppender">
  8. <layoutclass="org.apache.log4j.PatternLayout">
  9. <paramname="ConversionPattern"value="[%d{yyyy-MM-ddHH:mm:ss.SSS}]-[%c]-[%t]%x-%m%n"/>
  10. </layout>
  11. </appender>
  12. <!--MybatisandSQL-->
  13. <loggername="org.apache.ibatis"additivity="true">
  14. <levelvalue="DEBUG"/>
  15. <appender-refref="consoleAppender"/>
  16. </logger>
  17. <loggername="org.mybatis.spring"additivity="true">
  18. <levelvalue="ERROR"/>
  19. <appender-refref="consoleAppender"/>
  20. </logger>
  21. <loggername="java.sql"additivity="true">
  22. <levelvalue="DEBUG"/>
  23. <appender-refref="consoleAppender"/>
  24. </logger>
  25. <loggername="java.sql.Connection"additivity="true">
  26. <levelvalue="DEBUG"/>
  27. <appender-refref="consoleAppender"/>
  28. </logger>
  29. <loggername="java.sql.Statement"additivity="true">
  30. <levelvalue="DEBUG"/>
  31. <appender-refref="consoleAppender"/>
  32. </logger>
  33. <loggername="java.sql.PreparedStatement"additivity="true">
  34. <levelvalue="DEBUG"/>
  35. <appender-refref="consoleAppender"/>
  36. </logger>
  37. <!--Spring-->
  38. <loggername="org.springframework"additivity="true">
  39. <levelvalue="ERROR"/>
  40. <appender-refref="consoleAppender"/>
  41. </logger>
  42. <!--ActiveMQ-->
  43. <loggername="org.apache.activemq"additivity="true">
  44. <levelvalue="ERROR"/>
  45. <appender-refref="consoleAppender"/>
  46. </logger>
  47. <!--=====================================================================-->
  48. <!--根日志记录器-->
  49. <!--=====================================================================-->
  50. <root>
  51. <levelvalue="DEBUG"/>
  52. <appender-refref="consoleAppender"/>
  53. </root>
  54. </log4j:configuration>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "http://toolkit.alibaba-inc.com/dtd/log4j/log4j.dtd">
<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>
    <!-- ===================================================================== -->
    <!--  定义全局输出适配器                                                      -->
    <!-- ===================================================================== -->
    <appender name="consoleAppender" class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss.SSS}]-[%c]-[%t] %x - %m%n"/>
        </layout>
    </appender>

    <!-- Mybatis and SQL -->
    <logger name="org.apache.ibatis" additivity="true">
        <level value="DEBUG"/>
        <appender-ref ref="consoleAppender"/>
    </logger>

    <logger name="org.mybatis.spring" additivity="true">
        <level value="ERROR"/>
        <appender-ref ref="consoleAppender"/>
    </logger>
    <logger name="java.sql" additivity="true">
        <level value="DEBUG"/>
        <appender-ref ref="consoleAppender"/>
    </logger>

    <logger name="java.sql.Connection" additivity="true">
        <level value="DEBUG"/>
        <appender-ref ref="consoleAppender"/>
    </logger>

    <logger name="java.sql.Statement" additivity="true">
        <level value="DEBUG"/>
        <appender-ref ref="consoleAppender"/>
    </logger>

    <logger name="java.sql.PreparedStatement" additivity="true">
        <level value="DEBUG"/>
        <appender-ref ref="consoleAppender"/>
    </logger>

    <!-- Spring -->
    <logger name="org.springframework" additivity="true">
        <level value="ERROR"/>
        <appender-ref ref="consoleAppender"/>
    </logger>

    <!-- ActiveMQ -->
    <logger name="org.apache.activemq" additivity="true">
        <level value="ERROR"/>
        <appender-ref ref="consoleAppender"/>
    </logger>
    <!-- ===================================================================== -->
    <!--  根日志记录器                                                          -->
    <!-- ===================================================================== -->
    <root>
        <level value="DEBUG"/>
        <appender-ref ref="consoleAppender"/>
    </root>
</log4j:configuration>

 

最后,仔细查看启动时的输入发现了如下的错误提示

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

于是,我想是不是这个地方出问题了呢,赶紧上网搜索解决这个问题的资料。网上找到一个解释:

地址:http://lveyo.iteye.com/blog/418376

这个提示应该是读入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的配置,部分配置文件如下

 

  1. <!--Log4j配置-->
  2. <context-param>
  3. <param-name>log4jConfigLocation</param-name>
  4. <param-value>/WEB-INF/log4j.xml</param-value>
  5. </context-param>
  6. <context-param>
  7. <param-name>log4jRefreshInterval</param-name>
  8. <param-value>60000</param-value>
  9. </context-param>
  10. <listener>
  11. <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
  12. </listener>
  13. <!--扫描spring配置文件-->
  14. <context-param>
  15. <param-name>contextConfigLocation</param-name>
  16. <param-value>classpath:spring/application-*.xml</param-value>
  17. </context-param>
  18. <!--监听器-->
  19. <listener>
  20. <listener-class>com.hanvon.iface.web.listener.WebAppEventListener</listener-class>
  21. </listener>
  22. .......
<!--Log4j配置-->
    <context-param>
        <param-name>log4jConfigLocation</param-name>
        <param-value>/WEB-INF/log4j.xml</param-value>
    </context-param>
    <context-param>
        <param-name>log4jRefreshInterval</param-name>
        <param-value>60000</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
    </listener>

    <!-- 扫描spring配置文件 -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring/application-*.xml</param-value>
    </context-param>

    <!-- 监听器 -->
    <listener>
        <listener-class>com.hanvon.iface.web.listener.WebAppEventListener</listener-class>
    </listener>
.......

增加了上面的Log4j配置部分后,结果真的可以打印SQL 语句了,太高兴了得意!!!

我觉得,起作用的主要是下面的配置内容,这个配置正确设置了Log4j:

 

  1. <context-param>
  2. <param-name>log4jConfigLocation</param-name>
  3. <param-value>/WEB-INF/log4j.xml</param-value>
  4. </context-param>
  5. <context-param>
  6. <param-name>log4jRefreshInterval</param-name>
  7. <param-value>60000</param-value>
  8. </context-param>
  9. <listener>
  10. <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
  11. </listener>
<context-param>  
    <param-name>log4jConfigLocation</param-name>  
    <param-value>/WEB-INF/log4j.xml</param-value>  
</context-param>  
<context-param>  
    <param-name>log4jRefreshInterval</param-name>  
    <param-value>60000</param-value>  
</context-param>  
<listener>  
    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>  
</listener>



 

 

部分SQL语句输出如下:

  1. [2013-06-0621:07:35.040]-[java.sql.PreparedStatement]-[http-8080-2]-==>Executing:SELECTCOUNT(DISTINCTdev.ng_id)FROMdev_devicedevWHEREdev.nt_state=?
  2. [2013-06-0621:07:35.040]-[java.sql.PreparedStatement]-[http-8080-2]-==>Executing:SELECTCOUNT(DISTINCTdev.ng_id)FROMdev_devicedevWHEREdev.nt_state=?
  3. [2013-06-0621:07:35.040]-[java.sql.PreparedStatement]-[http-8080-1]-==>Parameters:
  4. [2013-06-0621:07:35.040]-[java.sql.PreparedStatement]-[http-8080-1]-==>Parameters:
  5. [2013-06-0621:07:35.040]-[java.sql.PreparedStatement]-[http-8080-2]-==>Executing:SELECTCOUNT(DISTINCTdev.ng_id)FROMdev_devicedevWHEREdev.nt_state=?
  6. [2013-06-0621:07:35.040]-[java.sql.PreparedStatement]-[http-8080-1]-==>Parameters:
  7. [2013-06-0621:07:35.041]-[java.sql.PreparedStatement]-[http-8080-2]-==>Parameters:1(Integer)
  8. [2013-06-0621:07:35.041]-[java.sql.PreparedStatement]-[http-8080-2]-==>Parameters:1(Integer)
  9. [2013-06-0621:07:35.041]-[java.sql.PreparedStatement]-[http-8080-2]-==>Parameters:1(Integer)
  10. [2013-06-0621:07:35.079]-[java.sql.ResultSet]-[http-8080-2]-<==Columns:COUNT(DISTINCTdev.ng_id)
  11. [2013-06-0621:07:35.079]-[java.sql.ResultSet]-[http-8080-2]-<==Columns:COUNT(DISTINCTdev.ng_id)
  12. [2013-06-0621:07:35.087]-[java.sql.ResultSet]-[http-8080-2]-<==Row:11
  13. [2013-06-0621:07:35.087]-[java.sql.ResultSet]-[http-8080-2]-<==Row:11
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics