配置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 [main] DEBUG com.example.mapper.UserMapper.selectUser - ==> Preparing: SELECT * FROM user WHERE id = ? 2024-01-01 12:00:00 [main] DEBUG com.example.mapper.UserMapper.selectUser - ==> Parameters: 1(Integer) 2024-01-01 12:00:00 [main] 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>
- 如果使用的是Log4j2,检查全局配置的status
通过以上步骤即可正确打印MyBatis的SQL日志。根据实际项目使用的日志框架选择对应配置即可。