为你的 项目安装Sql跟踪工具-P6Spy

我们在项目中有时候需要跟踪记录sql的执行情况,有时候跟踪的日志中的sql是预编译之后的,参数是带问号的,所以我们需要跟踪到真正的sql执行语句,P6spy正好可以满足我们的需要。先来看一下P6Spy的介绍:

P6Spy 是针对数据库访问操作的动态监测框架(为开源项目,github地址为https://github.com/p6spy/p6spy)它使得数据库数据可无缝截取和操纵,而不必对现有应用程序的代码作任何修改。P6Spy分发包包括P6Log,它是一个可记录任何Java应用程序的所有JDBC事务的应用程序。其配置完成使用时,可以进行数据访问性能的监测。下面我们来看一下怎么在项目中使用P6Spy。

引入Maven依赖

首先我们在项目中引入P6Spy的相关依赖。

        <dependency>
            <groupId>p6spy</groupId>
            <artifactId>p6spy</artifactId>
            <version>2.3.1</version>
        </dependency>

新增spy.properties

接下来我们需要在项目的classpath目录下增加spy.properties文件。其实这个文件P6Spy为我们提供了,但是我们可能还需要修改其中的一些东西。我现在配置的内容如下所示:

module.log=com.p6spy.engine.logging.P6LogFactory
driverlist=com.mysql.jdbc.Driver
deregisterdrivers=true
outagedetection=false
filter=false
autoflush = true
excludecategories=info,debug,result,batch
append=true
appender=com.p6spy.engine.spy.appender.Slf4JLogger
log4j.logger.p6spy=INFO,STDOUT,F
#配置p6spy的日志不重复打印
log4j.additivity.p6spy=false
logMessageFormat=com.p6spy.engine.spy.appender.MultiLineFormat

因为我的项目中配置了log4j.properties,所以这里我没有怎么配置日志输出相关的东西(日志相关的配置项在原来)。

替换原来的数据库驱动

接着我们需要做的是替换原来的数据库驱动。我的数据库用的是MySQL所以我这里做的修改是这样的(其他的数据库照样画葫芦)。

原来的数据库驱动:

<property name="driverClassName" value="com.mysql.jdbc.Driver"/>

修改之后的驱动:

<property name="driverClassName" value="com.p6spy.engine.spy.P6SpyDriver"/>

原来的URL:

<property name="url" value="jdbc:mysql://localhost:3306/XXX?useUnicode=true&characterEncoding=UTF-8"></property>

修改之后的URL:

<property name="url"  value="jdbc:p6spy:mysql://localhost:3306/XXX?useUnicode=true&characterEncoding=UTF-8"></property>

OK,经过这三步,我们的P6Spy就可以在项目中生效了。最后我们看一下效果:

效果

我在页面上进行了一个提交的操作,这个操作会向数据库中插入一条数据。我们看一下P6Spy跟踪到的sql语句:

控制台:

日志文件中:

P6Spy跟踪到了真正执行的sql语句。

附:

我的log4j.properties的内容

#Console Log
log4j.rootLogger=info, console, file

# Write to Console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.Threshold=INFO
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%5p %d{MM-dd HH:mm:ss}(%F:%L): %m%n

#Write to File
log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.File=D:/log/provider.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%5p %d{MM-dd HH:mm:ss}(%F:%L): %m%n

P6Spy的一些配置说明:

#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.Log4jLogger 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.PatternLayout
log4j.appender.STDOUT.layout.ConversionPattern=p6spy - #%m%n

另外还有和P6spy一起使用的图形界面的sql性能分析工具。具体的看这篇文章:监控和剖析数据库操作 -- P6Spy、SQL Profiler、IronTrack SQL 使用简介(https://www.ibm.com/developerworks/cn/java/j-lo-p6spy/

时间: 2024-11-02 02:08:26

为你的 项目安装Sql跟踪工具-P6Spy的相关文章

sql编程工具Sql Prompt下载及安装破解图文教程_MsSql

Sql Prompt智能提示及其格式化用起来非常方便. 免费下载地址:http://www.jb51.net/database/201355.html 1. 下载SQL Prompt 5.3.4.1,是个压缩包,里面有三个文件 免登录免积分下载地址:http://www.jb51.net/database/201355.html 1) 下载完成后,解压得到下面三项.一个是注册教程doc,一个是注册机keygen,一个是官方原版安装包V5.3.4.1.   2. 安装SQL Prompt 5.3.

sql编程工具Sql Prompt下载及安装破解图文教程

Sql Prompt智能提示及其格式化用起来非常方便. 免费下载地址:http://www.jb51.net/database/201355.html 1. 下载SQL Prompt 5.3.4.1,是个压缩包,里面有三个文件 免登录免积分下载地址:http://www.jb51.net/database/201355.html 1) 下载完成后,解压得到下面三项.一个是注册教程doc,一个是注册机keygen,一个是官方原版安装包V5.3.4.1. 2. 安装SQL Prompt 5.3.4.

消灭Bug!推荐7款优秀的开源Bug跟踪工具

摘要: 在这个充满 bug 的世界里,最遥远的距离不是生与死,而是你亲手制造的 bug 就在你眼前,你却怎么都找不到她. 在过去几年里,程序员改变着世界,然而,我们手中诞生的每个新网站或 APP 都面临着一个巨大的挑战--"bug".在这个充满 bug 的世界里,最遥远的距离不是生与死,而是你亲手制造的 bug 就在你眼前,你却怎么都找不到她.因此本文准备了 7 款优秀的开源 bug 跟踪系统来查找.记录和解决这些 bug.当然优秀的项目还有很多,您可以在评论区写下您在用的或者您认为最

在WINXP系统上安装SQL Server企业版的方法_应用技巧

先讲一下注意事项:必须启用"文件和打印共享"才能成功安装MSDE.否则安装进程可能会继续进行直到几乎完成, 然后又意外回滚,无法完成MSDE的安装. 我上次安装失败就是这个原因,平时我总是关闭SERVER服务,也就没有什么共享.顺便提一句,据说你试着把计算机名改成大写字母,那在安装SQL的时候就不会失败了,但是我没验证! XP系统下也可以安装 企业版本 安装办法如下: 一.在SQL服务器的安装盘中找到MSDE这个目录,并且点击setup.exe安装它,过程简单直接下一步就OK了.(这个

安装SQL Server 2000

2.2.3 安装SQL Server 2000安装SQL Server 2000 比较简单,其过程与其它Microsoft Windows 系列产品类似.我们以安装SQL Server 2000 Standard Edition 为例,其安装过程及说明如下: ·将SQL Server 2000 的光盘放入光驱.如果有Autorun 功能,则会出现安装程序启动画面,否则直接运行光盘中的Autorun 程序.如果操作系统是Windows 95,则需要选择其中的I"nstall SQL Server

教你安装SQL Server2005示例数据库

安装SQL server 2005时,如果你选择的是默认安装,就不会安装AdventureWorks 数据库.因为许多教程和例子都需要用到AdventureWorks 数据库,所以安装AdventureWorks 数据库非常必要.本文将论述此数据库的获得和安装方法. 下载并安装AdventureWorks 首先,去微软官方网站下载AdventureWorksdb.msi,这是AdventureWorks 的安装程序.然后把此文件和相关文件复制到你的计算机上.AdventureWorksBI.ms

MS SQL基础教程:调用SQL Server工具和向导

在企业管理器中可以很方便地调用其它SQL Server 工具,如SQL Server Query Analyzer (查询分析器).SQL Server Profiler (跟踪器)等,只须从"Tools (工具)"菜单中选择相应的工具即可. SQL Server 2000 中提供了大量的向导工具,可以引导用户完成一系列的数据库与服务器管理工作.可以从"Tools (工具)"菜单中选择"Wizards" 选项,或从工具栏中选择图标就会出现如图5-

安装SQL Server 2005的AdventureWorks

安装SQL server 2005时,如果你选择的是默认安装,就不会安装AdventureWorks 数据库.因为许多教程和例子都需要用到AdventureWorks 数据库,所以安装AdventureWorks 数据库非常必要.本文将论述此数据库的获得和安装方法. 下载并安装AdventureWorks 首先,去微软官方网站下载AdventureWorksdb.msi,这是AdventureWorks 的安装程序.然后把此文件和相关文件复制到你的计算机上.AdventureWorksBI.ms

安装SQL Server2005实例环境图解

对于大多数的数据库管理员和开发人员来说,安装并配置一个新的SQL Server是激动人心的任务,因为它可以带来全新的挑战和机会.安装只是众多新的学习最新的SQL Server版本的机会中的第一个.在这篇指南中,我们将会贯穿整个正确安装SQL Server 2005实例环境,以及当前的服务包(SP1)的全部步骤,这就开始吧! 关键的安装考虑 虽然大多数的SQL Server安装都使用了默认的参数,这样的话是一个简单的过程,但是没有理解安装参数的话,也会导致困惑或者将来安全攻击方面的问题.正因为如此