博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
为你的 项目安装Sql跟踪工具-P6Spy
阅读量:6427 次
发布时间:2019-06-23

本文共 4248 字,大约阅读时间需要 14 分钟。

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

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

引入Maven依赖

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

新增spy.properties

接下来我们需要在项目的classpath目录下增加spy.properties文件。其实这个文件P6Spy为我们提供了,但是我们可能还需要修改其中的一些东西。我现在配置的内容如下所示:
module.log=com.p6spy.engine.logging.P6LogFactorydriverlist=com.mysql.jdbc.Driverderegisterdrivers=trueoutagedetection=falsefilter=falseautoflush = trueexcludecategories=info,debug,result,batchappend=trueappender=com.p6spy.engine.spy.appender.Slf4JLoggerlog4j.logger.p6spy=INFO,STDOUT,F#配置p6spy的日志不重复打印log4j.additivity.p6spy=falselogMessageFormat=com.p6spy.engine.spy.appender.MultiLineFormat
因为我的项目中配置了log4j.properties,所以这里我没有怎么配置日志输出相关的东西(日志相关的配置项在原来)。

替换原来的数据库驱动

接着我们需要做的是替换原来的数据库驱动。我的数据库用的是MySQL所以我这里做的修改是这样的(其他的数据库照样画葫芦)。
原来的数据库驱动:
修改之后的驱动:
原来的URL:
修改之后的URL:
OK,经过这三步,我们的P6Spy就可以在项目中生效了。最后我们看一下效果:

效果

我在页面上进行了一个提交的操作,这个操作会向数据库中插入一条数据。我们看一下P6Spy跟踪到的sql语句:
控制台:
日志文件中:
P6Spy跟踪到了真正执行的sql语句。
附:
我的log4j.properties的内容
#Console Loglog4j.rootLogger=info, console, file# Write to Consolelog4j.appender.console=org.apache.log4j.ConsoleAppenderlog4j.appender.console.Threshold=INFOlog4j.appender.console.layout=org.apache.log4j.PatternLayoutlog4j.appender.console.layout.ConversionPattern=%5p %d{MM-dd HH:mm:ss}(%F:%L): %m%n#Write to Filelog4j.appender.file=org.apache.log4j.DailyRollingFileAppenderlog4j.appender.file.File=D:/log/provider.loglog4j.appender.file.layout=org.apache.log4j.PatternLayoutlog4j.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 使用简介( )
你可能感兴趣的文章
LA 2797 Monster Trap (Simple Geometry && Floyd)
查看>>
谁拿了最多奖学金(2005提高组第一题)
查看>>
Python专题
查看>>
MySQL server has gone away
查看>>
CentOS-6.5安装配置Tomcat7
查看>>
幂相关
查看>>
python定义影像投影
查看>>
ArcGIS紧凑型缓存存储格式分析
查看>>
kao2+mongodb搭建小程序后台环境(一)
查看>>
Spring Web Flow 入门demo(三)嵌套流程与业务结合 附源代码
查看>>
极光推送---安卓Demo
查看>>
Elasticsearch2.x 拼音分词插件lc-pinyin安装教程
查看>>
day03作业
查看>>
z=sin(xy)
查看>>
Python中的传值和引用
查看>>
遇到的like “%%" 加is null 一起使用的问题
查看>>
Floyd算法
查看>>
pygame初步(一)绘制一个运动的矩形
查看>>
CSS border 边框
查看>>
python编码
查看>>