P6Spy
P6Spy 是一个可以用来在应用程序中拦截和修改数据操作语句的开源框架。通过 P6Spy 我们可以对 SQL 语句进行拦截,相当于一个 SQL 语句的记录器,这样我们可以用它来作相关的分析,比如性能分析。P6Spy 用 Log4J 来记录 JDBC 调用的日记信息。
p6spy 组件,它可以拦截所有执行的 SQL 语句,而不管你使用的是什么 ORM 框架。对于 PrepareStatement 那样带参数(?) 的语句,它会帮你代上相应的参数值。
p6spy 的主页是http://sourceforge.net/projects/p6spy/,它支持当前流行的应用服务器,如 JBoss、Orion、Tomcat、WebLogic、WebSphere 等,将spy.properties和p6spy.jar,拷贝到classes根目录和lib目录就可以了,其实不用太在意 p6spy 的安装说明,关键是要了解了某个应用服务器本身,要搞清楚的一个问题是“谁在加载 p6spy 包,从哪里加载”,那么配置 p6spy 就不成问题了,你甚至可以把 p6spy 用在独立的 Java 应用程序中。
p6spy 可以输出日志到文件中、控制台、或者传递给 Log4j,而且还能配搭 SQL Profiler 或 IronTrackSQL 图形化监控 SQL 语句,监测到哪些语句的执行是耗时的,逐个优化。关于与 SQL Profiler 或 IronTrackSQL 的配合使用可参数文件的链接。
如果在你的应用程序启动后,却在 spy.log 文件中发现了如下的提示信息,那就是驱动程序加载先后的问题了。
<你的程序的数据库驱动名称> is a real driver in spy.properties, but it has been loaded before p6spy. p6spy will not wrap these connections. Either prevent the driver from loading, or try setting'deregisterdrivers' to true in spy.properties
请把 spy.properties 配置文件里的
deregisterdrivers=false
改为
deregisterdrivers=true
,重新运行即可。
这是因为有些应用系统中会先于 P6Spy 加载了真正的数据库的驱动程序,导致 P6Spy 无法监控到,设置
deregisterdrivers
为 true ,是显式地把真正的数据库的驱动程序进行反注册掉,而采用 P6Spy 的驱动程序。
使用步骤
首先,你的应用系统应当是基于数据库的,然后你需要去获取 P6Spy 相关的文件,下面介绍 P6Spy 的安装与使用的详细操作过程:
下载 P6Spy 的文件包,也可以下载它的源文件包来研究;
把 P6Spy 的 jar 包 p6spy.jar 放到 CLASSPATH 中,如果是 Web 应用程序则放在 YourWebApp/WEB-INF/lib/ 目录下;
把 spy.properties 放到 CLASSPATH 目录下,如果是 Web 应用程序放在 YourWebApp/WEB-INF/classess/ 目录下,注意不是 lib/ 目录
修改你应用系统中的数据库驱动名称为 P6Spy 的驱动程序名称 com.p6spy.engine.spy.P6SpyDriver 其它的全部使用默认值,暂时先都不用修改; (但需要注意注释掉默认的mysql驱动)
打开配置文件 spy.properties 文件,找到 realdriver,把它的值改为你的应用系统的真正的数据库驱动名称;
运行你的应用程序或 Web 应用程序,可以在 spy.log 里看到 P6Spy 监测到的 SQL 详细的执行与操作的记录信息了,包含有完整的 SQL 执行参数。
注意:在tomcat中放置p6spy.jar,在项目放ojdbc.jar,避免冲突
配置参数及相关意义
下表列出了 spy.properties 配置文件中的各配置项的名称、默认值及其意义和相关注意事项:
配置项名称 默认值 配置项意义及相关注意事项
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 和 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 数据源的一些定制信息,以分号分隔。
相关推荐
P6spy是一个JDBC Driver的包装工具,p6spy通过对JDBC Driver的封装以达到对SQL语句的监听和分析,以达到各种目的。 p6spy的安装步骤: 1. 下载p6spy的安装包 2. 把p6spy的jar包放到Classpath中,如果是WEB App...
p6spy-sql监控 p6spy-sql监控 p6spy-sql监控
虽然在hibernate中有show_sql选项,但是显示出来的语句大多类似 select * from xxx where value=? 但是有时候我们需要得到完整的SQL语句,怎么办呢?使用P6SPY就可以完成这个任务
p6spy.jar 博文链接:https://lxy19791111.iteye.com/blog/131293
通过 P6Spy 我们可以对 SQL 语句进行拦截,相当于一个 SQL 语句的记录器,这样我们可以用它来作相关的分析,比如性能分析。P6Spy 用 Log4J 来记录 JDBC 调用的日记信息。 自从 2003 年 11 月 30 日 P6Spy 版本 1.3 ...
用 p6spy 来观察 Java 程序中执行的所有 SQL 语句.docx
p6spy dataSource 配置 监听真实sql语句
P6spy是一个JDBC Driver的包装工具,p6spy通过对JDBC Driver的封装以达到对SQL语句的监听和分析,以达到各种目的。
专门用来监控hibernate的sql输出,进行调试应用程序的工具,找了好久才找到,里面有个配置文件,记住realdriver是你的驱动,而在hibernate设置的驱动是这个驱动代理,p6spy的驱动,相当于在hibernate和数据库之间放...
p6spy和sqlProfiler的配合使用让你的hibernate的show_sql更好用 p6spy和sqlProfiler的配合使用让你的hibernate的show_sql更好用 p6spy和sqlProfiler的配合使用让你的hibernate的show_sql更好用
p6spy简介,p6spy完整显示hibernate的SQL语句 包括参数,spring p6spy 配置
p6spy是一种可以在控制台上打印出sql语句的工具类,可以和多种数据库交互框架结合在一起,调试程序非常方便
对p6spy的使用做了些简化,其实主要目的有两个:1是为了学习p6spy的源码,2是简化使用方法,使一些非开发人员也能使用此工具监听sql,压缩包内附源码和说明文档
配置P6Spy和SQL Profiler
利用P6SPY +SQL Profiler调试、记录、统计web app对数据库的操作, 可以查看到PreparedStatment的执行最终的SQL语句。 有详细的操作说明 下面的这个是集成的完整版。。太大了就不上传了。自己下吧 jahia_v6_...
p6spy使用 sql跟踪 排除resultset 去掉问号
NULL 博文链接:https://hqhe-nj.iteye.com/blog/342372
p6spy.rar工具类,可输出完整sql,支持jdk1,5,亲测可用