【问题标题】:Log SQL queries in project using MyBatis and Spring使用 MyBatis 和 Spring 在项目中记录 SQL 查询
【发布时间】:2013-07-04 08:43:25
【问题描述】:

在我的项目中,我有

<bean id="ABCSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  <property name="dataSource" ref="ABCDataSource" />
  <property name="mapperLocations">
      <list>
        <value>classpath:com/myco/dao/XYZMapper.xml</value>
       </list>
  </property>
<bean>

log4j.logger.java.sql.Connection=debug, stdout, abclog
log4j.logger.java.sql.PreparedStatement=debug, stdout, abclog
log4j.logger.java.sql=debug, stdout, abclog
log4j.logger.org.mybatis=debug, stdout, abclog
log4j.logger.org.apache.ibatis=debug, stdout, abclog

当我在日志中运行应用程序时,我没有看到 SQL 查询 想知道我错过了什么

看到这个帖子how to configure log4j for Mybatis to print my SQL 建议更改mybatis类配置但不知道如何使用spring SqlSessionFactoryBean

【问题讨论】:

    标签: spring logging log4j mybatis ibatis


    【解决方案1】:

    您可以通过 mybatis-config.xml 为 Mybatis 添加日志记录。

    像这样添加 log4j:

    mybatis-config.xml

    <configuration>
      <settings>
        ...
        <setting name="logImpl" value="LOG4J"/>
        ...
      </settings>
    </configuration>
    

    然后在您的 log4j.properties 中,添加您要记录的类:

    log4j.logger.org.mybatis.example.MyMapper=TRACE
    

    SQL 语句在 DEBUG 级别记录,因此将输出设置为 DEBUG:

    log4j.logger.org.mybatis.example=DEBUG
    

    更多详情,请参阅documentation

    【讨论】:

    • 配置DEBUG日志级别会显示查询发送+参数+结果数量。配置 TRACE 日志级别将添加查询响应列和值
    【解决方案2】:

    引用how to configure logback for Mybatis to print my SQL 的回答,我不确定这是否完全适合您。它提供了用于日志记录的 Spring 配置。这种方法对我有用。

    为特定的 mybatis mapper set DEBUG (TRACE) 记录 SQL 语句 查看查询参数和结果)级别的记录器完全 限定映射器名称

    <logger name="com.mycompany.myapp.mapper.MyMapper" level="DEBUG"/>
    

    您可以记录来自所有映射器的所有 SQL 语句,如果它们位于 像这样的同一个包

    <logger name="com.mycompany.myapp.mapper" level="DEBUG"/>
    

    试一试,如果问题仍然存在。祝你好运!

    【讨论】:

      【解决方案3】:

      另一个快捷方式是在 application.properties 文件中将 mybatis 映射器的调试级别设置为 true:

      logging.level.<packageName>.mapper=DEBUG
      

      在控制台或您的日志文件中打印的示例日志:

      2020-03-03 09:41:27.057 DEBUG 10495 --- [io-50006-exec-1] c.f.t.d.m.M.countByExample               : ==>  Preparing: SELECT count(*) FROM MessageRecivers WHERE ((ReciverId = ? and ReadStats = ? and ReciverMessageFolder <> ?)) 
      2020-03-03 09:41:27.066 DEBUG 10495 --- [io-50006-exec-1] c.f.t.d.m.M.countByExample               : ==> Parameters: 58(Long), 0(Short), 1(Short)
      2020-03-03 09:41:27.473 DEBUG 10495 --- [io-50006-exec-1] c.f.t.d.m.M.countByExample               : <==      Total: 1
      

      【讨论】:

        【解决方案4】:

        用最简单的方式配置测试,看日志。然后自定义输出(例如文件、级别)。

        <?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE log4j:configuration PUBLIC "-//log4j/log4j Configuration//EN" 
                                             "log4j.dtd" >
        <log4j:configuration>
        
          <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
            <layout class="org.apache.log4j.PatternLayout">
              <param name="ConversionPattern" value="%d %-5p (%c.java:%L).%M - %m%n"/>
            </layout>
          </appender>
        
          <root>
            <priority value="TRACE" />
            <appender-ref ref="STDOUT"/>
          </root>
        
        </log4j:configuration>
        

        【讨论】:

        • 在哪里写配置>
        • 嗨,@eatSleepCode 我无法关注你。你到底是什么意思?
        • 我的意思是在哪里写配置,在 log4j.xml 中?另外问题是我无法在控制台上获得输出。
        • 如果你使用的是maven,把这个配置放到src/main/resources文件夹下的log4j.xml文件里。否则,在默认包中。
        【解决方案5】:

        尝试将所有必要的行添加到您的配置中。

        这是应该工作的示例:

        #configure root logger
        log4j.rootLogger=ERROR, file, stdout
        
        #configure all mybatis mappers logging
        log4j.logger.com.myco.dao=ERROR
        #configure your mapper logging
        log4j.logger.com.myco.dao.XYZMapper=DEBUG
        
        #configure appender
        log4j.appender.stdout=org.apache.log4j.ConsoleAppender
        log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
        log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-01-02
          • 2016-07-09
          • 1970-01-01
          • 1970-01-01
          • 2018-09-08
          • 2017-01-06
          • 2014-06-27
          相关资源
          最近更新 更多