使用 MyBatis 和 Spring 在项目中记录 SQL 查询

问题描述 投票:0回答:7
spring logging log4j mybatis ibatis
7个回答
13
投票

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

记录特定 mybatis 映射器设置 DEBUG (TRACE 查看查询参数和结果)记录器级别完全 合格的映射者名称

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

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

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

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


12
投票

您可以通过 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

有关更多详细信息,请参阅文档


5
投票

另一个快捷方式是在 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

1
投票

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

<?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>

1
投票

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

这是应该有效的示例:

#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

0
投票

两种实现方式:

  1. 编辑logback.xml:
<logger name="mapperPackageName" level="debug"/>
  1. 编辑应用程序.属性
logging.level.<mapperPackageName>=DEBUG

mapperPackageName
是Mapper类所在的包。


0
投票

您可以通过在 main 方法中或创建连接工厂时的某个地方调用

LogFactory.useStdOutLogging();
[java 配置] 来配置它。

© www.soinside.com 2019 - 2024. All rights reserved.