zoukankan      html  css  js  c++  java
  • P6SPY(JDBC SQL拦截)的安装和使用

    P6spy是一个JDBC Driver的包装工具,p6spy通过对JDBC Driver的封装以达到对SQL语句的监听和分析,以达到各种目的。
     
    p6spy的安装步骤:
     
    1. 下载p6spy的安装包 http://cid-6adab3222e64b22c.office.live.com/self.aspx/.Public/java/jar/p6spy-install.zip

     
    2. 把p6spy的jar包放到Classpath中,如果是WEB App放在WEB APP/WEB-INF/lib目录下
     
    3. 把p6spy的Driver Class name替换原来的JDBC Driver Class Name, url, username, password一切都不变。修改你 原有 JDBC Driver为:com.p6spy.engine.spy.P6SpyDriver
     -- 由于每个应用的数据库连接配置,可能不一样,有些是Hibernate, OJB, Spring或者其它。。。。请按照相应的配置文件修改即可。
     -- dbcp还要再试试,才知道是否支持,理论是支持的。    

     

    4. 编辑spy.properties文件,把JDBC Driver Class Name作为RealDriverName的值,其它的属性一般不用指定.  比如我的是:com.mysql.jdbc.Driver
     
    5. 把spy.properties放到合适的目录下,一定要让App能够找着,如果是webapp就放在webapp/WEB-INF/classess/目录下。
     
    6. 启动应用,看看spy.log是否生成出来了?

    我的spy.log在tomcat/bin 目录中

    7、驱动程序加载先后的问题解决
      如果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 Options File                                            #
    # See documentation for detailed instructions                   #
    #################################################################

    #################################################################
    # MODULES                                                       #
    #                                                               #
    # Modules provide the P6Spy functionality.  If a module, such   #
    # as module_log is commented out, that functionality will not   #
    # be available.  If it is not commented out (if it is active),  #
    # the functionality will be active.                             #
    #                                                               #
    # Values set in Modules cannot be reloaded using the            #
    # reloadproperties variable.  Once they are loaded, they remain #
    # in memory until the application is restarted.                 #
    #                                                               #
    #################################################################

    module.log=com.p6spy.engine.logging.P6LogFactory
    #module.outage=com.p6spy.engine.outage.P6OutageFactory

    #################################################################
    # REALDRIVER(s)                                                 #
    #                                                               #
    # In your application server configuration file you replace the #
    # "real driver" name with com.p6spy.engine.P6SpyDriver. This is #
    # where you put the name of your real driver P6Spy can find and #
    # register your real driver to do the database work.            #
    #                                                               #
    # If your application uses several drivers specify them in      #
    # realdriver2, realdriver3.  See the documentation for more     #
    # details.                                                      #
    #                                                               #
    # Values set in REALDRIVER(s) cannot be reloaded using the      #
    # reloadproperties variable.  Once they are loaded, they remain #
    # in memory until the application is restarted.                 #
    #                                                               #
    #################################################################

    # oracle driver
    # realdriver=oracle.jdbc.driver.OracleDriver

    # mysql Connector/J driver
     realdriver=com.mysql.jdbc.Driver

    # informix driver
    # realdriver=com.informix.jdbc.IfxDriver

    # ibm db2 driver
    # realdriver=COM.ibm.db2.jdbc.net.DB2Driver

    # the mysql open source driver
    #realdriver=org.gjt.mm.mysql.Driver

    #specifies another driver to use
    #realdriver2=
    #specifies a third driver to use
    #realdriver3=


    #the DriverManager class sequentially tries every driver that is
    #registered to find the right driver.  In some instances, it's possible to
    #load up the realdriver before the p6spy driver, in which case your connections
    #will not get wrapped as the realdriver will "steal" the connection before
    #p6spy sees it.  Set the following property to "true" to cause p6spy to
    #explicitily deregister the realdrivers
    deregisterdrivers=true

    ################################################################
    # P6LOG SPECIFIC PROPERTIES                                    #
    ################################################################
    # no properties currently available

    ################################################################
    # EXECUTION THRESHOLD PROPERTIES                               #
    ################################################################
    # This feature applies to the standard logging of P6Spy.       # 
    # While the standard logging logs out every statement          #
    # regardless of its execution time, this feature puts a time   # 
    # condition on that logging.  Only statements that have taken  # 
    # longer than the time specified (in milliseconds) will be     #
    # logged.  This way it is possible to see only statements that #
    # have exceeded some high water mark.                          #
    # This time is reloadable.                                     #
    #
    # executionthreshold=integer time (milliseconds)
    #
    executionthreshold=

    ################################################################
    # P6OUTAGE SPECIFIC PROPERTIES                                 #
    ################################################################
    # Outage Detection
    #
    # This feature detects long-running statements that may be indicative of
    # a database outage problem. If this feature is turned on, it will log any
    # statement that surpasses the configurable time boundary during its execution.
    # When this feature is enabled, no other statements are logged except the long
    # running statements. The interval property is the boundary time set in seconds.
    # For example, if this is set to 2, then any statement requiring at least 2 
    # seconds will be logged. Note that the same statement will continue to be logged
    # for as long as it executes. So if the interval is set to 2, and the query takes
    # 11 seconds, it will be logged 5 times (at the 2, 4, 6, 8, 10 second intervals).
    #
    # outagedetection=true|false
    # outagedetectioninterval=integer time (seconds)
    #
    outagedetection=false
    outagedetectioninterval=

    ################################################################
    # COMMON PROPERTIES                                            #
    ################################################################

    # filter what is logged
    filter=false

    # comma separated list of tables to include when filtering
    include     = 
    # comma separated list of tables to exclude when filtering
    exclude     =

    # sql expression to evaluate if using regex filtering
    sqlexpression = 


    # turn on tracing
    autoflush   = true

    # sets the date format using Java's SimpleDateFormat routine
    dateformat=

    #list of categories to explicitly include 
    includecategories=

    #list of categories to exclude: error, info, batch, debug, statement,
    #commit, rollback and result are valid values
    excludecategories=info,debug,result,batch


    #allows you to use a regex engine or your own matching engine to determine 
    #which statements to log
    #
    #stringmatcher=com.p6spy.engine.common.GnuRegexMatcher
    #stringmatcher=com.p6spy.engine.common.JakartaRegexMatcher
    stringmatcher=

    # prints a stack trace for every statement logged
    stacktrace=false
    # if stacktrace=true, specifies the stack trace to print
    stacktraceclass=

    # determines if property file should be reloaded
    reloadproperties=false
    # determines how often should be reloaded in seconds
    reloadpropertiesinterval=60

    #if=true then url must be prefixed with p6spy:
    useprefix=false

    #specifies the appender to use for logging
    #appender=com.p6spy.engine.logging.appender.Log4jLogger
    #appender=com.p6spy.engine.logging.appender.StdoutLogger
    appender=com.p6spy.engine.logging.appender.FileLogger

    # name of logfile to use, note Windows users should make sure to use forward slashes in their pathname (e:/test/spy.log) (used for file logger only)
    logfile     = spy.log

    # append to  the p6spy log file.  if this is set to false the
    # log file is truncated every time.  (file logger only)
    append=true

    #The following are for log4j logging only
    log4j.appender.STDOUT=org.apache.log4j.ConsoleAppender
    log4j.appender.STDOUT.layout=org.apache.log4j.PatternLayout
    log4j.appender.STDOUT.layout.ConversionPattern=p6spy - %m%n

    #log4j.appender.CHAINSAW_CLIENT=org.apache.log4j.net.SocketAppender
    #log4j.appender.CHAINSAW_CLIENT.RemoteHost=localhost
    #log4j.appender.CHAINSAW_CLIENT.Port=4445
    #log4j.appender.CHAINSAW_CLIENT.LocationInfo=true

    log4j.logger.p6spy=INFO,STDOUT


    #################################################################
    # DataSource replacement                                        #
    #                                                               #
    # Replace the real DataSource class in your application server  #
    # configuration with the name com.p6spy.engine.spy.P6DataSource,#
    # then add the JNDI name and class name of the real         #
    # DataSource here                                #
    #                                                               #
    # Values set in this item cannot be reloaded using the          #
    # reloadproperties variable.  Once it is loaded, it remains     #
    # in memory until the application is restarted.                 #
    #                                                               #
    #################################################################
    #realdatasource=/RealMySqlDS
    #realdatasourceclass=com.mysql.jdbc.jdbc2.optional.MysqlDataSource

    #################################################################
    # DataSource properties                                         #
    #                                                               #
    # If you are using the DataSource support to intercept calls    # 
    # to a DataSource that requires properties for proper setup,    #
    # define those properties here. Use name value pairs, separate  #
    # the name and value with a semicolon, and separate the         #
    # pairs with commas.                                            #
    #                                             #
    # The example shown here is for mysql                             #
    #                                                               #
    #################################################################
    #realdatasourceproperties=port;3306,serverName;ibmhost,databaseName;mydb


    #################################################################
    # JNDI DataSource lookup                                        #
    #                                                               #
    # If you are using the DataSource support outside of an app     #
    # server, you will probably need to define the JNDI Context     #
    # environment.                                                  #
    #                                                               #
    # If the P6Spy code will be executing inside an app server then #
    # do not use these properties, and the DataSource lookup will   #
    # use the naming context defined by the app server.             #
    #                                                               #
    # The two standard elements of the naming environment are    #
    # jndicontextfactory and jndicontextproviderurl. If you need    #
    # additional elements, use the jndicontextcustom property.      #
    # You can define multiple properties in jndicontextcustom,      #
    # in name value pairs. Separate the name and value with a       #
    # semicolon, and separate the pairs with commas.                #
    #                                                               #
    # The example shown here is for a standalone program running on #
    # a machine that is also running JBoss, so the JDNI context     #
    # is configured for JBoss (3.0.4).                              #
    #                                                               #
    #################################################################
    #jndicontextfactory=org.jnp.interfaces.NamingContextFactory  
    #jndicontextproviderurl=localhost:1099
    #jndicontextcustom=java.naming.factory.url.pkgs;org.jboss.nameing:org.jnp.interfaces

    #jndicontextfactory=com.ibm.websphere.naming.WsnInitialContextFactory
    #jndicontextproviderurl=iiop://localhost:900 
  • 相关阅读:
    我大学时代的好朋友要结婚了!
    (function(root,factory){})(this,function($){}) 一个立即执行的匿名函数自调
    非书面的非官方的常见的HTTP请求状态码分析
    一个页面多个HTTP请求 页面卡顿!
    requestAnimationFrame Web中写动画的另一种选择
    js 点击 返回顶部 动画
    css3动画 一行字鼠标触发 hover 从左到右颜色渐变
    var 和 let 的异同?
    H5案例分享:使用JS判断客户端、浏览器、操作系统类型
    基于浏览器的HTML5地理定位
  • 原文地址:https://www.cnblogs.com/jifeng/p/1908222.html
Copyright © 2011-2022 走看看