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

pgccezyw  于 2022-11-06  发布在  Spring
关注(0)|答案(6)|浏览(105)

在我的项目中,我有

<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

8aqjt8rx

8aqjt8rx1#

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

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

nom7f22z2#

尝试将所有必要的行添加到配置中。
下面是应该可以工作的示例:


# 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
erhoui1w

erhoui1w3#

两种实现方式:
1.编辑logback.xml:

<logger name="mapperPackageName" level="debug"/>

1.application.properties

logging.level.<mapperPackageName>=DEBUG

mapperPackageName是Mapper类所在的包。

wqsoz72f

wqsoz72f4#

引用how to configure logback for Mybatis to print my SQL的一个答案,我不确定这是否完全适用于您。它提供了用于日志记录的Spring配置。这种方法对我很有效。
要记录特定mybatisMap器的SQL语句,请使用完全限定的Map器名称设置记录器的DEBUG(TRACE以查看查询参数和结果)级别

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

如果所有Map器中的所有SQL语句都在同一个程序包中,则可以记录这些语句,如下所示

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

给予一试,如果问题还在的话。祝你好运!

ycggw6v2

ycggw6v25#

您可以通过mybatis-config.xml为Mybatis添加日志记录。
像这样添加log4j:

mybatis-config.xml文件

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

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

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

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

log4j.logger.org.mybatis.example=DEBUG

有关详细信息,请参阅documentation

uz75evzq

uz75evzq6#

另一个快捷方式是在www.example.com文件中将mybatisMap器的调试级别设置为trueapplication.properties:

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

相关问题