利用p6spy打印执行的sql


  今天要新搭一个项目框架,其中要解决的一个问题是,将所有执行的sql打印到日志,放到一个文件中,注意打印的不是预编译待问号的sql,而是真正能放在数据库中执行的sql,这样更直观,更简单。(本项目是springboot项目)

一.是什么

  P6Spy 是针对数据库访问操作的动态监测框架,它使得数据库数据可无缝截取和操纵,而不必对现有应用程序的代码作任何修改

二.作用

   无缝截取和操控数据库数据

三.实现

  1. 在pom文件中添加p6spy的依赖

     <dependency>
     	<groupId>p6spy</groupId>
     	<artifactId>p6spy</artifactId>
     	<version>3.8.0</version>
     </dependency>
    
  2. 下载p6spy的jar包,将里面的spy.properties文件拷贝到resources目录下,主要做了如下修改

     #系统使用的真正的数据库驱动程序名称
     driverlist=com.mysql.jdbc.Driver
     # 监测属性配置文件是否进行重新加载,默认是false
     reloadproperties=true
     # 指定 Log 的 appender
     appender=com.p6spy.engine.spy.appender.Slf4JLogger
     logMessageFormat=com.dmsdbj.itoo.tool.p6spy.P6SpyLogger
     databaseDialectDateFormat=yyyy-MM-dd HH:mm:ss
     # 显示指定过滤log时包含的分类
     excludecategories=info,debug,result,resultset
    
配置项名称 默认值 配置项意义及相关注意事项
module.log com.p6spy.engine.logging. P6LogFactory 用来拦截和记录任务应用程序的 JDBC 语句。若无配置或注释掉则无此功能。
module.outage com.p6spy.engine.outage. P6OutageFactory 检测和记录执行时间比较长的 SQL 语句。若无配置或注释掉则无此功能。
realdriver
真正的应用系统应用的数据库驱动程序名称。
realdriver2
真正的应用系统应用的第二种备用数据库驱动程序名称。
realdriver3
真正的应用系统应用的第三种备用数据库驱动程序名称。
deregisterdrivers false 显示地把真正的数据库的驱动程序停止反注册掉。取值 true| false
executionthreshold
P6Log 模块执行时间设置,整数值 (以毫秒为单位),只有当超过这个时间才停止记录 Log。
outagedetection false P6Outage 模块是否记录较长时间运行的语句。取值 true| false
outagedetectioninterval
P6Outage 模块执行时间设置,整数值 (以秒为单位)),只有当超过这个时间才停止记录 Log。
filter false 是否过滤 Log,取值 true| false
include
过滤 Log 时所包含的表名列表,以逗号分隔。
exclude
过滤 Log 时所排除的表名列表,以逗号分隔。
sqlexpression
过滤 Log 时的 SQL 表达式名称
autoflush true 是否自动刷新。取值 true| false
dateformat
设置时间的格式,也就是用 Java 的 SimpleDateFormat 程序。
includecategories
显示指定过滤 Log 时包含的分类列表,取值为 error,info,batch,debug,statement,commit,rollback,result 的各种组合。
excludecategories
显示指定过滤 Log 时排队的分类列表,取值同上。
stringmatcher
应用正则表达式来过滤 Log,取值为 com.p6spy.engine.common.GnuRegexMatcher 和 com.p6spy.engine.common.JakartaRegexMatcher
stacktrace false 打印堆栈跟踪信息。取值 true| false
stacktraceclass
如果 stacktrace=true,则可以指定具体的类名来停止过滤。
reloadproperties false 监测属性配置文件是否停止重新加载。取值 true| false
reloadpropertiesinterval 60 属性配置文件重新加载的时间间隔,以秒为单位。
useprefix false 是否加上前缀,设置为 true,会加上 p6spy: 作为前缀。取值 true| false
appender com.p6spy.engine.logging. appender.FileLogger 指定 Log 的 appender,与 Log4J 有点同义,取值:com.p6spy.engine.logging.appender.Log4jLogger、com.p6spy.engine.logging.appender.StdoutLogger:表示将输出的SQL或者日志信息输出到Console窗口 和 com.p6spy.engine.logging.appender.FileLogger
logfile spy.log 指定 Log 的文件名,任何适于操作系统的文件。
append true 指定是否每次是增加 Log,设置为 false 则每次都会先停止清空。取值 true| false
log4j.appender.STDOUT org.apache.log4j.ConsoleAppender 当 appender 为 log4j 时采用的配置,配置如同 Log4J 的相关配置。
log4j.appender.STDOUT.layout org.apache.log4j.PatternLayout 同上
log4j.appender.STDOUT. layout.ConversionPattern p6spy - %m%n 同上
log4j.logger.p6spy INFO,STDOUT Log 级别的设置,取值同 Log4J 的配置
realdatasource
设置数据源 DataSource 的配置名称。
realdatasourceclass
设置数据源 DataSource 的类的全称。
realdatasourceproperties
设置数据源 DataSource 的属性,以分号分隔。
jndicontextfactory
设置 JNDI 数据源的 NamingContextFactory。
jndicontextproviderurl
设置 JNDI 数据源的提供者的 URL。
jndicontextcustom
设置 JNDI 数据源的一些定制信息,以分号分隔。
  1. 工程的数据库驱动换位p6spy驱动

     datasource:
     	type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.p6spy.engine.spy.P6SpyDriver
     	url: jdbc:p6spy:mysql://localhost:3306/intern?autoReconnect=true&useSSL=false&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull
     	username: root
     	password: root
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值