mybatis 通过 logimpl 指定日志实现,如 stdout_logging 直接输出,log4j 结合 log4j.properties 配置控制台与文件双输出,并需显式设置 org.apache.ibatis 和 java.sql 包级别为 debug。

MyBatis 本身不内置日志实现,而是通过日志适配器机制对接第三方日志框架。要让 SQL、参数、结果等信息输出到控制台或文件,关键在于两步:指定日志实现类(logImpl),并正确配置对应日志框架的行为。
明确指定 MyBatis 使用的日志实现
在 mybatis-config.xml 的 <settings></settings> 中设置 logImpl 值,告诉 MyBatis 用哪个日志后端:
-
直接输出到控制台(无需额外依赖):使用内置的
STDOUT_LOGGING
-
使用 Log4j 输出到控制台 + 文件:设为
LOG4J,并确保 classpath 下有 Log4j 1.x 依赖和配置文件
- 注意:如果项目已引入 SLF4J 或 Logback,且未显式设置
logImpl,MyBatis 会自动探测并优先使用它们(按内部优先级顺序)
Log4j 配置 log4j.properties 实现双输出
在 src/main/resources/ 下新建 log4j.properties,以下是最简有效配置:
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
- 根日志器设为
DEBUG,同时启用console和file两个 Appender - 控制台 Appender 使用
ConsoleAppender,输出格式含级别、时间、类名和消息 - 文件 Appender 推荐用
DailyRollingFileAppender(按天滚动)或RollingFileAppender(按大小滚动) - 必须单独开启 MyBatis 相关包的日志级别,否则 SQL 不会打印:
log4j.logger.java.sql=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.ResultSet=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
Maven 依赖要匹配版本
若选 Log4j 1.x(最常用兼容方案),pom.xml 中添加:
- Log4j 2.x 需用
LOG4J2作为logImpl值,并引入log4j-core和log4j-api - Spring Boot 项目更推荐 SLF4J + Logback(默认已集成),只需在
application.properties中设:
logging.level.java.sql=DEBUG
验证是否生效
运行一次数据库操作(如 select * from user),观察输出:
- 用
STDOUT_LOGGING:控制台直接出现带[DEBUG]前缀的 SQL 行 - 用 Log4j:控制台和日志文件中都会出现格式化后的 SQL 及参数(如
Parameters: 1(Integer)) - 若无输出,检查是否漏掉
log4j.logger.java.sql级别配置,或logImpl拼写错误(如写成LOG4J1)










