前进之路 发表于 2025-6-12 20:46:27

MyBatis打印SQL日志的配置

配置MyBatis打印日志的步调如下,支持多种日志框架(如Logback、Log4j2等):
一、选择日志框架并添加依赖(以常见组合为例)

1. Logback(推荐)

<!-- Maven 依赖 -->
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.4.14</version>
</dependency>
2. Log4j2

<!-- Maven 依赖 -->
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.23.1</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-slf4j2-impl</artifactId>
    <version>2.23.1</version>
</dependency>
二、配置日志文件

1. Logback 配置 (logback.xml)

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!-- 控制台输出 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
      <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
      </encoder>
    </appender>

    <!-- 设置MyBatis Mapper接口的日志级别为DEBUG -->
    <!-- com.example.mapper为mapper的xml文件所在的包路径-->
    <!-- additivity="false" 表示不传递给父级(root),不重复打印日志-->
    <logger name="com.example.mapper" level="DEBUG" additivity="false">
      <appender-ref ref="STDOUT"/>
    </logger>

    <!-- 根日志级别 -->
    <root level="INFO">
      <appender-ref ref="STDOUT"/>
    </root>
</configuration>
2. Log4j2 配置 (log4j2.xml)

<?xml version="1.0" encoding="UTF-8"?>
<!-- status="WARN"表示全局的日子级别-->
<Configuration status="WARN">
    <Appenders>
      <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level %logger{36} - %msg%n"/>
      </Console>
    </Appenders>

    <Loggers>
      <!-- 设置MyBatis Mapper接口的日志级别 -->
      <!-- com.example.mapper为mapper的xml文件所在的包路径-->
      <!-- additivity="false" 表示不传递给父级(root),不重复打印日志-->
      <Logger name="com.example.mapper" level="DEBUG" additivity="false">
            <AppenderRef ref="Console"/>
      </Logger>
      
                <!-- 根日志级别 -->
                <!--logger的级别是:root,logger; root是根日志,logger是root的子级别;root及logger里面的AppenderRef表示打印的方式-控制台 -->
      <Root level="INFO">
            <AppenderRef ref="Console"/>
      </Root>
    </Loggers>
</Configuration>
3. MyBatis配置文件的配置:

<!-- 在mybatis-config.xml中指定日志实现(可选) -->
<configuration>
    <settings>
      <setting name="logImpl" value="SLF4J"/> <!-- 或 LOG4J2、LOG4J等,**配置SLF4J是最好的** -->
    </settings>
</configuration>
三、验证配置


[*]运行SQL操作:执行MyBatis的数据库查询,观察控制台输出。
[*]预期日志:应看到类似以下内容,包罗SQL语句、参数和结果:2024-01-01 12:00:00 DEBUG com.example.mapper.UserMapper.selectUser - ==>Preparing: SELECT * FROM user WHERE id = ?
2024-01-01 12:00:00 DEBUG com.example.mapper.UserMapper.selectUser - ==> Parameters: 1(Integer)
2024-01-01 12:00:00 DEBUG com.example.mapper.UserMapper.selectUser - <==      Total: 1

四、常见问题排查


[*]日志未打印:

[*]查抄依赖是否辩说(如同时存在多个日志框架)。
[*]确认logger name路径与Mapper接口包名同等。
[*]确保日志级别设置为DEBUG。

[*]日志未打印,查抄Log4j2配置文件与mapper的Logger

[*]假如使用的是Log4j2,查抄全局配置的status<!--此处的status为WARN的日子级别 -->
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">

[*]查抄mapper的Logger配置,要大于即是全局配置<!-- 设置MyBatis Mapper接口的日志级别 -->
<!-- 此处设置的level="DEBUG" ,要大于全局的配置status="WARN" -->
<Logger name="com.example.mapper" level="DEBUG" additivity="false">
    <AppenderRef ref="Console"/>
</Logger>


通过以上步调即可精确打印MyBatis的SQL日志。根据现实项目使用的日志框架选择对应配置即可。
页: [1]
查看完整版本: MyBatis打印SQL日志的配置