在 Spring Boot + MyBatis 项目中,打印 SQL 日志主要有以下几种方式,根据需求选择合适的方法:


方法 1:通过 application.yml/application.properties 配置

(推荐)直接启用 MyBatis 日志

yaml

复制

下载

# application.yml
mybatis:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl  # 直接输出到控制台

或指定日志框架(如 SLF4J + Logback):

yaml

复制

下载

logging:
  level:
    # 包路径根据你的Mapper接口所在包修改
    com.example.mapper: DEBUG  # 打印Mapper接口的SQL日志

方法 2:日志框架配置(Logback/SLF4J)

在 logback-spring.xml 中配置:

xml

复制

下载

运行

<!-- 打印MyBatis的SQL日志 -->
<logger name="com.example.mapper" level="DEBUG"/>  <!-- Mapper接口包路径 -->
<!-- 打印JDBC原始SQL(包含参数) -->
<logger name="jdbc.sqlonly" level="DEBUG"/>
<!-- 打印JDBC结果(可选) -->
<logger name="jdbc.sqltiming" level="INFO"/>

方法 3:通过 MyBatis 拦截器打印完整 SQL

如果需要看到 带参数的真实 SQL(而非占位符 ?),可添加以下配置:

java

复制

下载

@Configuration
public class MyBatisConfig {
    @Bean
    public ConfigurationCustomizer configurationCustomizer() {
        return configuration -> {
            configuration.setLogImpl(org.apache.ibatis.logging.stdout.StdOutImpl.class);
            // 启用MyBatis的SQL日志打印
            configuration.setLogPrefix("MYBATIS-SQL:");
        };
    }
}

方法 4:打印 PreparedStatement 的完整 SQL

在 application.yml 中启用 JDBC 日志(需依赖 p6spy 或 log4jdbc):

使用 p6spy(推荐)
  1. 添加依赖:

    xml

    复制

    下载

    运行

    <dependency>
        <groupId>p6spy</groupId>
        <artifactId>p6spy</artifactId>
        <version>3.9.1</version>
    </dependency>
  2. 修改数据源配置:

    yaml

    复制

    下载

    spring:
      datasource:
        url: jdbc:p6spy:mysql://localhost:3306/db  # 原URL前加 `jdbc:p6spy:`
        driver-class-name: com.p6spy.engine.spy.P6SpyDriver
  3. 创建 spy.properties

    properties

    复制

    下载

    module.log=com.p6spy.engine.logging.P6LogFactory
    appender=com.p6spy.engine.spy.appender.StdoutLogger
    logMessageFormat=com.p6spy.engine.spy.appender.MultiLineFormat

方法 5:动态开启日志(无需重启)

通过 Actuator 动态调整日志级别(需依赖 spring-boot-actuator):

  1. 添加依赖:

    xml

    复制

    下载

    运行

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
  2. 发送请求修改日志级别:

    bash

    复制

    下载

    curl -X POST http://localhost:8080/actuator/loggers/com.example.mapper \
    -H "Content-Type: application/json" \
    -d '{"configuredLevel":"DEBUG"}'

效果对比

方法 输出内容 优点 缺点
方法1/2 SELECT * FROM user WHERE id=? 简单易用 参数用?占位,不直观
方法3 完整SQL(控制台输出) 无需额外依赖 日志格式较原始
方法4(p6spy) SELECT * FROM user WHERE id=1 真实SQL,带参数值 需修改数据源URL

常见问题

  1. 日志不打印?

    • 检查包路径是否正确(与Mapper接口包一致)。

    • 确保没有其他日志框架冲突(如同时存在Logback和Log4j2)。

  2. 输出太多无关日志?

    • 精确指定Mapper包路径,避免全局DEBUG

  3. 生产环境注意事项

    • 避免长期开启DEBUG级别日志,建议通过Actuator动态开启。

选择最适合你的场景的方式即可!

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐