《SpringBoot2.0 实战》系列-整合p6spy实现sql打印日志功能

川长思鸟来 2022-12-15 03:51 1048阅读 0赞

前言

sql日志打印功能,在开发中很实用,直接将日志sql拷贝到数据库执行,就能很快发现问题。最近项目中也需要用到这个功能,所以记录此文mark下。

整合

引入相关依赖

  1. <!--p6spy 打印sql-->
  2. <dependency>
  3. <groupId>com.github.gavlyukovskiy</groupId>
  4. <artifactId>p6spy-spring-boot-starter</artifactId>
  5. <version>1.6.2</version>
  6. </dependency>

编写spy.properties配置文件,此处提供我的版本。

  1. #MODULE p6spy提供了两种模块进行日志记录:log和outage,两者有不同的功能,配置参数也有专属,但是它们也共享一些配置参数,如哪些表被记录,日志文件名称和地址,是否显示sql执行轨迹等。
  2. #log用来拦截和记录任何使用jdbc的应用的数据库声明日志,默认为开启。
  3. #outage主要是用来最低化log所带来的性能问题,只记录超过一定时间的执行语句,默认为关闭。
  4. module.log=com.baomidou.mybatisplus.extension.p6spy.MybatisPlusLogFactory
  5. module.outage=com.p6spy.engine.outage.P6OutageFactory
  6. logMessageFormat=com.baomidou.mybatisplus.extension.p6spy.P6SpyLogger
  7. #实际的数据库驱动,真正的数据库驱动
  8. #realdriver=com.mysql.jdbc.Driver
  9. #实际的数据库驱动备份,当前面的数据库驱动不对时,顺序查找下一驱动,直到找到合适为止,默认为空。
  10. #realdriver2=
  11. #realdriver3=
  12. #无效化已注册的驱动,如果在其他地方已经定义好了真正的数据库驱动,那么p6spy driver就不会生效,也就不能起到作用,所以需#要把此选项置为true。
  13. deregisterdrivers=true
  14. #log模块专属的参数,当log模块开启时,如果执行语句超出这个时间(单位为毫秒),才能被记录在文件中,可以重新被载入,默认为0。
  15. executionthreshold=
  16. #outage专属的参数,当outage模块开启时,outagedetection为true时,会根据outagedetectioninterval(单位为秒)的大小, 间隔的去捕获执行语句,一般用来捕获长时间执行的语句。。
  17. outagedetection=true
  18. outagedetectioninterval=2
  19. #以下参数是公共的属性,log和outage都可以公用的参数过滤器开关,是否根据参数过滤一些记录内容
  20. filter=true
  21. #当过滤器开启时,需要记录的表,默认为都记录
  22. #include=
  23. #当过滤器开启时,不需要记录的表,默认为都记录
  24. exclude= foreign_key_checks,variable_name,GET_LOCK,RELEASE_LOCK,flyway_schema_history,information_schema,@,SELECT DATABASE(),SELECT version(),ACT_,QRTZ_
  25. # 过滤 Log 时的 SQL 正则表达式名称 默认为空
  26. #当过滤器开启时,根据sql表达式过滤
  27. #sqlexpression =
  28. #是否自动刷新
  29. autoflush = true
  30. #输出的日志文件的日期格式,也就是用Java的SimpleDateFormat程序。
  31. dateformat= yyyy-MM-dd HH:mm:ss
  32. #定义包含的日志级别,当日志级别属于此类型时,才能被记录,属性值有error, info, batch, debug, statement, commit, rollback 和result
  33. #includecategories=statement
  34. #定义不包含的日志级别,当日志级别属于此类型时,不会被记录;
  35. #可去掉的结果集有error,info,batch,debug,statement,commit,rollback,result,resultset.
  36. excludecategories=info,debug,result,commit,resultset
  37. #使用正则表达式来过滤 Log,匹配时才会被记录,例如: #stringmatcher=com.p6spy.engine.common.GnuRegexMatcher #stringmatcher=com.p6spy.engine.common.JakartaRegexMatcher
  38. #stringmatcher=
  39. #是否对每一SQL的执行语句进行打印堆栈跟踪信息,通常在进行长时间执行SQL的情况下打开进行监控。
  40. stacktrace=false
  41. #当上一轨迹开关打开时,可以指定具体的类名来进行过滤。
  42. stacktraceclass =
  43. #监测属性配置文件是否进行重新加载,一般应用服务器在启动时进行加载一次就够了。
  44. reloadproperties=false
  45. #当是否重新加载开关打开时,定义重新加载时间周期。
  46. reloadpropertiesinterval = 60
  47. #是否加上前缀,设置为 true,会加上 p6spy: 作为前缀
  48. useprefix=false
  49. #指定 Log 的 appender,与 Log4J 有点同义,取值:com.p6spy.engine.logging.appender.Log4jLogger com.p6spy.engine.logging.appender.StdoutLogger com.p6spy.engine.logging.appender.FileLogger
  50. # 日志只输出到控制台,不会记录到日志文件
  51. appender=com.baomidou.mybatisplus.extension.p6spy.StdoutLogger
  52. # 使用日志系统记录 sql
  53. #appender=com.p6spy.engine.spy.appender.Slf4JLogger
  54. #指定记录的日志文件名称和地址,根目录在应用服务器的发布端.如tomcat在%TOMCAT_HOME%/bin目录下。
  55. logfile = ./logs/spy.log
  56. #文件续载标识,在log的appender类型为FileLogger时,才生效,如果为true,则在生成的日志文件后面继续进行记录,否则删除之前的内容。
  57. #append=true
  58. #类似与log4j的记录器的布局:
  59. #log4j.appender.STDOUT=org.apache.log4j.ConsoleAppender
  60. #log4j.appender.STDOUT.layout=org.apache.log4j.PatternLayout
  61. #log4j.appender.STDOUT.layout.ConversionPattern=p6spy - #%m%n

yml中增加启用开关,不同环境不同配置。

  1. # p6spy sql打印
  2. decorator:
  3. datasource:
  4. enabled: true # 是否启用

测试结果

在这里插入图片描述

摘自本人的开源项目cloud-plus:https://blog.csdn.net/HXNLYW/article/details/104635673

发表评论

表情:
评论列表 (有 0 条评论,1048人围观)

还没有评论,来说两句吧...

相关阅读

    相关 P6Spy

     P6Spy是一个可以用来在应用程序中拦截和修改数据操作语句的开源框架。通过P6Spy我们可以对SQL语句进行拦截,相当于一个SQL语句的记录器,这样我们可以用它来作相关的分析