p6spy使用说明

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

P6SPY 说明手册
一、简介
P6Spy 是一个可以用来在应用程序中拦截和修改数据操作语句的开源框架。

通过 P6Spy 我们可以对 SQL 语句进行拦截,相当于一个SQL 语句的记录器,这样我们可以用它来作相关的分析,比如性能分析。

P6Spy 用 Log4J 来记录 JDBC 调用的日记信息。

二、原理
我们可以认为 P6Spy 就是一个代理(Proxy),它只做了一层对JDBC 驱动的拦截,然后转发出去,这样的设计与实际的应用程序没有任何的耦合性,除了在配置中将驱动程序改成 P6Spy 的拦截驱动外,程序其他地方并不需要做任何的改变。

这层拦截器除了可能会给系统带来略微的性能下降外,对程序其他方面没有任何的影响。

而相对于这一点点的性能下降,在开发环境中对于开发人员来说是无法感觉到,相比它所带来的好处,完全可以忽略不计
三、配置步骤:
1.在/download.Html,下载zip包, 解压出p6spy.jar spy.properties两个文件
2. 将p6spy.jar 和spy.properties所在目录放入工程的classpath 中。

3.编辑spy.properties,进行相关参数的配置,具体配置及说明参考附录1.1。

3.编辑datasource的配置文件,将实际的datasource指向到p6datasource,在此datasource中再嵌套定义原datasource。

如:
.....
<bean id="dataSource" class="com.p6spy.engine.spy.P6DataSource"> <constructor-arg>
<ref local="dataSourceTarget" />
</constructor-arg>
</bean>
<bean id="dataSourceTarget"
class="mons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName"
value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${ername}" />
<property name="password" value="${jdbc.password}" />
<property name="maxActive" value="${jdbc.maxActive}" />
</bean>
.....
以上配置完成后,启动系统,根据第二步配置的spy.log文件所在地,会相应的生成日志文件,可以看到 P6Spy 监测到的 SQL 详细的执行与操作的记录信息了,包含有完整的 SQL 执行参数。

参考附录
1.1spy.properties的参数说明
下面对实例进行分析,# 以后的内容为注释项
#####
# MODULE
#p6spy提供了两种模块进行日志记录:log和outage,两者有不同的
#功能,配置参数也有专属,但是它们也共享一些配置参数,如哪些#表被记录,日志文件名称和地址,是否显示sql执行轨迹等。

#log用来拦截和记录任何使用jdbc的应用的数据库声明日志,默认#为开启。

#outage主要是用来最低化log所带来的性能问题,只记录超过一定#时间的执行语句,默认为关闭。

module.log=com.p6spy.engine.logging.P6LogFactory
#module.outage=com.p6spy.engine.outage.P6OutageFactory #实际的数据库驱动,真正的数据库驱动
realdriver=com.mysql.jdbc.Driver
#实际的数据库驱动备份,当前面的数据库驱动不对时,顺序查找下#一驱动,直到找到合适为止,默认为空。

realdriver2=
realdriver3=
#无效化已注册的驱动,如果在其他地方已经定义好了真正的数据库#驱动,那么p6spy driver就不会生效,也就不能起到作用,所以需#要把此选项置为true。

deregisterdrivers=true
#log模块专属的参数,当log模块开启时,如果执行语句超
#出这个时间(单位为毫秒),才能被记录在文件中,可以重新被载入,#默认为0。

executionthreshold=
#outage专属的参数,当outage模块开启时,outagedetection为#true时,会根据outagedetectioninterval(单位为秒)的大小,#间隔的去捕获执行语句,一般用来捕获长时间执行的语句。

outagedetection=false
outagedetectioninterval=
#以下参数是公共的属性,log和outage都可以公用的参数
#过滤器开关,是否根据参数过滤一些记录内容
filter=false
#当过滤器开启时,需要记录的表,默认为都记录
include =
#当过滤器开启时,不需要记录的表,默认为都记录
exclude =
#当过滤器开启时,根据sql表达式过滤
sqlexpression =
#是否自动刷新
autoflush = true
#输出的日志文件的日期格式,也就是用 Java 的 SimpleDateFormat #程序。

dateformat=
#定义包含的日志级别,当日志级别属于此类型时,才能被记录,属#性值有error, info, batch, debug, statement,commit, rollback #和 result
includecategories=
#定义不包含的日志级别,当日志级别属于此类型时,不会被记录excludecategories=
#使用正则表达式来过滤 Log,匹配时才会被记录,例如:
#stringmatcher=mon.GnuRegexMatcher
#stringmatcher=mon.JakartaRegexMatcher stringmatcher=
#是否对每一SQL的执行语句进行打印堆栈跟踪信息,通常在进行长#时间执行SQL的情况下打开进行监控。

stacktrace=false
#当上一轨迹开关打开时,可以指定具体的类名来进行过滤。

stacktraceclass =
#监测属性配置文件是否进行重新加载,一般应用服务器在启动时进#行加载一次就够了。

reloadproperties=false
#当是否重新加载开关打开时,定义重新加载时间周期。

reloadpropertiesinterval = 60
#是否加上前缀,设置为 true,会加上 p6spy: 作为前缀useprefix=false
#指定Log 的appender,与Log4J 有点同义,取值:
#com.p6spy.engine.logging.appender.Log4jLogge
#com.p6spy.engine.logging.appender.StdoutLogger
#com.p6spy.engine.logging.appender.FileLogger
appender=com.p6spy.engine.logging.appender.FileLogger #指定记录的日志文件名称和地址,根目录在应用服务器的发布端。

#如tomcat在%TOMCAT_HOME%/bin目录下。

logfile = log/spy11.log
#文件续载标识,在log的appender类型为FileLogger时,才生效,#如果为true,则在生成的日志文件后面继续进行记录,否则删除之#前的内容。

append=true
#类似与log4j的记录器的布局:
#log4j.appender.STDOUT=org.apache.log4j.ConsoleAppender
#yout=org.apache.log4j.PatternLay #out
#yout.ConversionPattern=p6spy - #%m%n。

相关文档
最新文档