文章目录

  • 一.是什么
  • 二.作用
  • 三.实现



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

一.是什么

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

二.作用

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

三.实现

  1. 在pom文件中添加p6spy的依赖
<dependency>
 	<groupId>p6spy</groupId>
 	<artifactId>p6spy</artifactId>
 	<version>3.8.0</version>
 </dependency>
  1. 下载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