【spring】日志打印

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
img

  • 推荐:kuan 的首页,持续学习,不断总结,共同进步,活到老学到老
  • 导航
    • 檀越剑指大厂系列:全面总结 java 核心技术点,如集合,jvm,并发编程 redis,kafka,Spring,微服务,Netty 等
    • 常用开发工具系列:罗列常用的开发工具,如 IDEA,Mac,Alfred,electerm,Git,typora,apifox 等
    • 数据库系列:详细总结了常用数据库 mysql 技术点,以及工作中遇到的 mysql 问题等
    • 懒人运维系列:总结好用的命令,解放双手不香吗?能用一个命令完成绝不用两个操作
    • 数据结构与算法系列:总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂

非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨

日志打印

SpringBoot 中 使用 [info] 日志级别打印 mybatis sql 语句
在 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
mybatis:
  type-aliases-package: com.jiafupeng.mapper
  mapper-locations: classpath:mapper*.xml
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 控制台输出日志
public class StdOutImpl implements Log {

  public StdOutImpl(String clazz) {

  }

  @Override
  public boolean isDebugEnabled() {
    return true;
  }

  @Override
  public boolean isTraceEnabled() {
    return true;
  }

  @Override
  public void error(String s, Throwable e) {
    System.err.println(s);
    e.printStackTrace(System.err);
  }

  @Override
  public void error(String s) {
    System.err.println(s);
  }

  @Override
  public void debug(String s) {
    System.out.println(s);
  }

  @Override
  public void trace(String s) {
    System.out.println(s);
  }

  @Override
  public void warn(String s) {
    System.out.println(s);
  }
}

2.自定义

要想改变 mybatis sql 语句输出内容级别,则只需自定义 Log 实现类,重写 mybatis sql 打印方式及级别。代码如下

#application.xml
mybatis:
  type-aliases-package: com.jiafupeng.mapper
  mapper-locations: classpath:mapper*.xml
  configuration:
 log-impl: com.jiafupeng.util.MySlf4jImpl # mybatis自定义日志输出实现类 并将[debug]日志输出成[info]日志
@Slf4j
public class MySlf4jImpl implements Log {
    public MySlf4jImpl(String clazz) {
    }

    @Override
    public boolean isDebugEnabled() {
        return log.isInfoEnabled();
    }

    @Override
    public void debug(String s) {
        log.info(s);
    }
}

3.配置

指定 logback 的日志级别为 info,也可在 [info] 级别日志中查看 mybatis 的 sql 语句。

#logback.xml
<!-- 日志输出级别 -->
<root level="info">
 <appender-ref ref="FILE-INFO"/>
</root>

<!-- 如果想将mybatis-sql[info]日志单独输出到一个文件中,就加上如下配置 -->
<!-- <logger name="com.jiafupeng.util.MySlf4jImpl" level="info" additivity="false">-->
<!-- <appender-ref ref="FILE-SQL"/>-->
<!-- </logger>-->

4.不打印

生产环境如果不想打印 mybatis sql 则注释掉打印实现类即可,或者使用 NoLoggingImpl.java 作为实现类,具体看源码。

mybatis:
  type-aliases-package: com.jiafupeng.mapper
  mapper-locations: classpath:mapper*.xmlmybatis:
  type-aliases-package: com.jiafupeng.mapper
  mapper-locations: classpath:mapper*.xml
  configuration:
    log-impl: org.apache.ibatis.logging.nologging.NoLoggingImpl # 无日志(默认有debug日志)

觉得有用的话点个赞 👍🏻 呗。

❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

img

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Kwan的解忧杂货铺

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值