Mybatis-Spring环境下批量XML Mapper查询日志配置问题求助
解决Mybatis-Spring 5下批量记录所有Mapper查询日志(JDK Logger)
核心原因
Mybatis在Spring 5环境中通过自身代理类封装JDBC操作,不再直接触发原生java.sql包的日志,因此原iBatis时代的配置失效,需针对Mybatis自身的日志组件调整配置。
解决方案步骤
1. 确保Mybatis使用JDK Logger作为日志实现
在Mybatis核心配置XML中指定日志实现:
<!-- mybatis-config.xml --> <configuration> <settings> <!-- 强制绑定JDK Logger --> <setting name="logImpl" value="JDK_LOGGING"/> </settings> </configuration>
如果是Spring XML整合场景,可直接在SqlSessionFactoryBean中配置:
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <property name="mapperLocations" value="classpath*:mapper/**/*.xml"/> <property name="configuration"> <bean class="org.apache.ibatis.session.Configuration"> <property name="logImpl" value="JDK_LOGGING"/> </bean> </property> </bean>
2. 在Tomcat的logs.properties中配置Mybatis JDBC日志
替代原java.sql配置,直接配置Mybatis负责JDBC日志的包,即可批量输出所有Mapper的查询(含参数):
# 开启Mybatis JDBC层级日志,输出SQL语句及绑定参数 org.apache.ibatis.logging.jdbc.level=FINE # 指定日志处理器(控制台或文件按需选择) org.apache.ibatis.logging.jdbc.handlers=java.util.logging.ConsoleHandler # 可选:配置日志格式和处理器级别 java.util.logging.ConsoleHandler.level=FINE java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter
3. 精准控制日志范围(可选)
若无需全量JDBC日志,可单独配置对应Statement的日志类:
# 仅输出预编译查询(PreparedStatement)日志 org.apache.ibatis.logging.jdbc.PreparedStatementLogger.level=FINE # 仅输出未预编译查询(Statement)日志 org.apache.ibatis.logging.jdbc.StatementLogger.level=FINE
日志级别说明
FINE:输出完整SQL语句及绑定的参数值FINER:输出更详细日志(含结果集、连接获取/释放等)INFO及以上级别不会输出SQL相关细节
内容的提问来源于stack exchange,提问作者Dany Allaw
相关产品推荐
相关产品推荐

