当前位置:   article > 正文

mybatis 的SQL日志级别调整方法_springboot 如何在代码中设置mybatis 日志级别

springboot 如何在代码中设置mybatis 日志级别

问题描述

在 Spring Cloud 项目中,生产环境需要打印mybatis的sql语句日志,但是mybatis打印的sql的默认日志级别是[debug],如果生产环境想看到sql语句,就必须开启[debug]级别的日志打印,这样做debug日志量过大,显然不可行。

如下绿色方案是我抄来的,但在我工程里没生效,最后我自己尝试在此基础上新研究的蓝色方法

解决思路

  • Spring Boot 中通过logback打印 mybatis的sql语句日志,并自定义日志输出实现
  • 将sql语句[debug]日志级别上升到[info]日志级别

解决方案

1. 常用的mybatis 日志输出是由org.apache.ibatis.logging.stdout.StdOutImpl控制的

根据StdOutImpl.java可看出日志都是System.out.println(s);的控制台输出,配置及源码如下:

application.xml配置:
  1. mybatis:
  2. type-aliases-package: com.jiafupeng.mapper
  3. mapper-locations: classpath:mapper/**/*.xml
  4. configuration:
  5. log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 控制台输出日志
StdOutImpl .java源码如下:
  1. public class StdOutImpl implements Log {
  2. public StdOutImpl(String clazz) {
  3. // Do Nothing
  4. }
  5. @Override
  6. public boolean isDebugEnabled() {
  7. return true;
  8. }
  9. @Override
  10. public boolean isTraceEnabled() {
  11. return true;
  12. }
  13. @Override
  14. public void error(String s, Throwable e) {
  15. System.err.println(s);
  16. e.printStackTrace(System.err);
  17. }
  18. @Override
  19. public void error(String s) {
  20. System.err.println(s);
  21. }
  22. @Override
  23. public void debug(String s) {
  24. System.out.println(s);
  25. }
  26. @Override
  27. public void trace(String s) {
  28. System.out.println(s);
  29. }
  30. @Override
  31. public void warn(String s) {
  32. System.out.println(s);
  33. }
  34. }
2. 要想改变mybatis sql语句输出内容级别,则只需自定义Log实现类,重写mybatis sql打印方式及级别。代码如下
application.xml
  1. mybatis:
  2. type-aliases-package: com.jiafupeng.mapper
  3. mapper-locations: classpath:mapper/**/*.xml
  4. configuration:
  5. log-impl: com.***.***.MySlf4jImpl # mybatis自定义日志输出实现类 并将[debug]日志输出成[info]日志
MySlf4jImpl.java
  1. @Slf4j
  2. public class MySlf4jImpl implements Log {
  3. public MySlf4jImpl(String clazz) {
  4. // Do Nothing
  5. }
  6. @Override
  7. public boolean isDebugEnabled() {
  8. // return log.isDebugEnabled();
  9. // 将debug级别输出权限改成info级别
  10. return log.isInfoEnabled();
  11. }
  12. ...
  13. @Override
  14. public void debug(String s) {
  15. // log.debug(s);
  16. // debug日志输出成info级别日志
  17. log.info(s);
  18. }
  19. ...
  20. }
3. 指定logback的日志级别为info,也可在[info]级别日志中查看mybatis 的 sql语句。
logback.xml
  1. <!-- 日志输出级别 -->
  2. <root level="info">
  3. <appender-ref ref="FILE-INFO"/>
  4. </root>
  5. <!-- 如果想将mybatis-sql[info]日志单独输出到一个文件中,就加上如下配置 -->
  6. <!-- <logger name="com.jiafupeng.util.MySlf4jImpl" level="info" additivity="false">-->
  7. <!-- <appender-ref ref="FILE-SQL"/>-->
  8. <!-- </logger>-->

蓝色方案:

对如上方案稍加修改:

概述:

由于我工程里用的是多数据源,在整合mybatis时,每个数据源的注册类都自行扫描mapper接口和**Mapper.xml文件,所以我将application.yml中增加的关于mybatis的相关配置恢复到修改前的状态,然后在resource的对应mapper目录中加入mybatis-config.xml,并且在注册数据源中将此文件注册进去,并且在mybatis-config.xml中加入相应配置后,mybatis的SQL日志就以INFO的方式打印出来了。

方案详述如下:
1. 将application.yml中增加的关于mybatis的相关配置恢复到修改前的状态

        注意,如果您的工程是单数据源,直接留用application.yml中增加的关于mybatis的相关配置即可。

2. 在resource/mapper/下适当的位置增加mybatis当前数据源的全局配置文件mybatis-config.xml

        如果您工程里已有此文件,请忽略此操作。

3. 在数据源注册类中增加mybatis-config.xml对应描述代码

        如果您工程里已有此文件,请忽略此操作。

  1. @Data
  2. @Configuration
  3. @MapperScan(basePackages = MyDruidDatasrouceConfig.PACKAGE, sqlSessionFactoryRef = "mySqlSessionFactory")
  4. @Slf4j
  5. public class MyDruidDatasrouceConfig {
  6. ......
  7. static final String CONFIG_LOCATION = "classpath:mapper/mybatis-config.xml";
  8. ......
  9. @Primary
  10. @Bean(name = "myDruidDatasrouceConfig ")
  11. public SqlSessionFactory mySqlSessionFactory(@Qualifier("myDruidDataSource") DataSource myDataSource) throws Exception {
  12. ......
  13. sessionFactory.setConfigLocation(new PathMatchingResourcePatternResolver().getResource(CONFIG_LOCATION));
  14. return sessionFactory.getObject();
  15. }
4. 在mybatis-config.xml中增加如下配置:

        直接将日志实现类加到mybatis-config.xml配置里即可。

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
  3. <configuration>
  4. <settings>
  5. ......
  6. <setting name="logImpl" value="com.***.***.MySlf4jImpl"/>
  7. ......
  8. </settings>
  9. </configuration>

至此,齐活儿!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/599966
推荐阅读
相关标签
  

闽ICP备14008679号