P6SPY 使用说明

mn6w 贡献于2014-09-07

作者 Roc  创建于2009-03-13 03:14:00   修改者Roc  修改于2009-03-13 10:34:00字数3390

文档摘要:简介P6Spy是一个可以用来在应用程序中拦截和修改数据操作语句的开源框架。通过P6Spy我们可以对SQL语句进行拦截,相当于一个SQL语句的记录器,这样我们可以用它来作相关的分析,比如性能分析。P6Spy用Log4J来记录JDBC调用的日记信息。二、原理我们可以认为P6Spy就是一个代理(Proxy),它只做了一层对JDBC驱动的拦截,然后转发出去,这样的设计与实际的应用程序没有任何的耦合性,除了在配置中将驱动程序改成P6Spy的拦截驱动外,程序其他地方并不需要做任何的改变。
关键词:

P6SPY 说明手册 一、简介 P6Spy 是一个可以用来在应用程序中拦截和修改数据操作语句的开源框架。通过 P6Spy 我们可以对 SQL 语句进行拦截,相当于一个 SQL 语句的记录器,这样我们可以用它来作相关的分析,比如性能分析。P6Spy 用 Log4J 来记录 JDBC 调用的日记信息。 二、原理 我们可以认为 P6Spy 就是一个代理(Proxy),它只做了一层对 JDBC 驱动的拦截,然后转发出去,这样的设计与实际的应用程序没有任何的耦合性,除了在配置中将驱动程序改成 P6Spy 的拦截驱动外,程序其他地方并不需要做任何的改变。这层拦截器除了可能会给系统带来略微的性能下降外,对程序其他方面没有任何的影响。而相对于这一点点的 性能下降,在开发环境中对于开发人员来说是无法感觉到,相比它所带来的好处,完全可以忽略不计 三、配置步骤: 1.在http://www.p6spy.com/download.Html,下载zip包, 解压出p6spy.jar spy.properties两个文件 2. 将p6spy.jar 和spy.properties所在目录放入工程的classpath中。 3.编辑spy.properties,进行相关参数的配置,具体配置及说明参考附录 1.1。 3.编辑datasource的配置文件,将实际的datasource指向到p6datasource,在此datasource中再嵌套定义原datasource。如: ..... ..... 以上配置完成后,启动系统,根据第二步配置的spy.log文件所在地,会相应的生成日志文件,可以看到 P6Spy 监测到的 SQL 详细的执行与操作的记录信息了,包含有完整的 SQL 执行参数。 参考附录 1.1 spy.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=com.p6spy.engine.common.GnuRegexMatcher #stringmatcher=com.p6spy.engine.common.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 #log4j.appender.STDOUT.layout=org.apache.log4j.PatternLay#out #log4j.appender.STDOUT.layout.ConversionPattern=p6spy - #%m%n

下载文档到电脑,查找使用更方便

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 6 金币 [ 分享文档获得金币 ] 0 人已下载

下载文档