SpringBoot中 使用[info]日志级别打印mybatis sql语句
时间:2022-07-23
本文章向大家介绍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 # 控制台输出日志
StdOutImpl .java
public class StdOutImpl implements Log {
public StdOutImpl(String clazz) {
// Do Nothing
}
@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]日志
MySlf4jImpl.java
/**
* @author jiafupeng
* @create 2020/5/26 13:31
* @desc 自定义mybatis打印sql实现类
* 将debug日志输出成info日志 对sql进行
**/
@Slf4j
public class MySlf4jImpl implements Log {
public MySlf4jImpl(String clazz) {
// Do Nothing
}
@Override
public boolean isDebugEnabled() {
// return log.isDebugEnabled();
// 将debug级别输出权限改成info级别
return log.isInfoEnabled();
}
...
@Override
public void debug(String s) {
// log.debug(s);
// debug日志输出成info级别日志
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. 结果验证
image.png
拓展
- mybatis sql 打印实现类有很多种,查看实现类源码即可知实现方式,本文使用自定义实现方式,也可使用现有实现类根据项目灵活配置。
image.png
- 生产环境如果不想打印mybatis sql 则注释掉打印实现类即可,或者使用NoLoggingImpl.java作为实现类,具体看源码。
mybatis:
type-aliases-package: com.jiafupeng.mapper
mapper-locations: classpath:mapper/**/*.xml
或
mybatis:
type-aliases-package: com.jiafupeng.mapper
mapper-locations: classpath:mapper/**/*.xml
configuration:
log-impl: org.apache.ibatis.logging.nologging.NoLoggingImpl # 无日志(默认有debug日志)
- Java的字符串常量相关的一个问题
- [喵咪Liunx(3)]端口转发工具rinetd
- 基于PhalApi的Smarty拓展
- PhalGo-参数验证过滤
- [喵咪Redis]Redis配置文件和主从设置
- [喵咪Redis]Redis-Sentinel
- [喵咪Redis]Redis安装与介绍
- [喵咪Liunx(4)Monit进程监控
- 【第四期】GC专题
- ML中相似性度量和距离的计算&Python实现
- ASP.NET MVC Model元数据及其定制: Model元数据的定制
- 小白也可以操作的手机TensorFlow教程:Android版和iOS版
- PhalApi-PHPExcel基于PhalApi的PHPExcel拓展
- [喵咪软件推荐(2)]全球服务器测速工具speedtest-cli
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释