P6Spy 是一个可以用来在应用程序中拦截和修改数据操作语句的开源框架。 通过 P6Spy 我们可以对 SQL 语句进行拦截,相当于一个 SQL 语句的记录器,这样我们可以用它来作相关的分析,比如性能分析。
注意:该插件有性能损耗,建议平时开发测试时使用,不建议生产环境使用。
<dependency>
<groupId>p6spygroupId>
<artifactId>p6spyartifactId>
<version>3.9.0version>
dependency>
P6Spy 工作原理:P6Spy 通过劫持 JDBC 驱动,在调用实际 JDBC 驱动前拦截调用的目标语,达到 SQL 语句日志记录的目的。
spring.datasource.driver-class-name=com.p6spy.engine.spy.P6SpyDriver
spring.datasource.url=jdbc:p6spy:mysql://localhost:3306/dev?serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=123456
#3.2.1以上使用
modulelist=com.baomidou.mybatisplus.extension.p6spy.MybatisPlusLogFactory,com.p6spy.engine.outage.P6OutageFactory
# 自定义日志打印
logMessageFormat=com.baomidou.mybatisplus.extension.p6spy.P6SpyLogger
#日志输出到控制台
appender=com.baomidou.mybatisplus.extension.p6spy.StdoutLogger
# 使用日志系统记录 sql
#appender=com.p6spy.engine.spy.appender.Slf4JLogger
# 设置 p6spy driver 代理
deregisterdrivers=true
# 取消JDBC URL前缀
useprefix=true
# 配置记录 Log 例外,可去掉的结果集有error,info,batch,debug,statement,commit,rollback,result,resultset.
excludecategories=info,debug,result,commit,resultset
# 日期格式
dateformat=yyyy-MM-dd HH:mm:ss
# 实际驱动可多个
#driverlist=org.h2.Driver
# 是否开启慢SQL记录
outagedetection=true
# 慢SQL记录标准 2 秒
outagedetectioninterval=2
List<User> users = userMapper.selectList(null);
1. 上面的样例配置,我们是直接将日志输出到控制台,我们可以修改 appender 配置属性,使用日志系统记录 sql:
2. 再次执行查询,可以看到现在改用日志系统记录 sql 了:
也可以修改 appender 配置属性,将日志输出到文件中:
#日志输出到文件
appender=com.p6spy.engine.spy.appender.FileLogger
# 指定 Log 的文件名 默认 spy.log
logfile=spy.log
# 指定是否每次是增加 Log,设置为 false 则每次都会先进行清空 默认true
append=true
1. 如果觉得默认的日志格式不合适,我们也可以使用 logMessageFormat 和 customLogMessageFormat 这两个配置参数来自定义日志输出格式:
可用的变量为:
- %(connectionId):connection id
- %(currentTime):当前时间
- %(executionTime):执行耗时
- %(category):执行分组
- %(effectiveSql):提交的 SQL 换行
- %(effectiveSqlSingleLine):提交的 SQL 不换行显示
- %(sql):执行的真实 SQL 语句,已替换占位
- %(sqlSingleLine):执行的真实 SQL 语句,已替换占位不换行显示
logMessageFormat=com.p6spy.engine.spy.appender.CustomLineFormat
customLogMessageFormat=%(currentTime) | SQL耗时: %(executionTime) ms | 连接信息: %(category)-%(connectionId) | 执行语句: %(sql)
点击跳转至原文地址
--------------最后感谢大家的阅读,愿大家技术越来越流弊!--------------
--------------也希望大家给我点支持,谢谢各位大佬了!!!--------------