zoukankan      html  css  js  c++  java
  • p6spy简介

    在公司项目中运用了这项技术,一开始不清楚这是干啥用的,在网上查找资料有所一定的了解,但是应该不够全面,希望可以评论指出。

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

    首先需要在项目中引入p6spy的依赖。

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

    接下来我们需要在项目的classpath目录下增加spy.properties文件。具体配置内容如下:

    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
    接着我们需要做的是替换原来的数据库驱动。我的数据库用的是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>

    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

    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.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

    在ibm developerWorks社区中有相关介绍:https://www.ibm.com/developerworks/cn/java/j-lo-p6spy/

  • 相关阅读:
    MYSQL InnoDB二级索引存储主键值而不是存储行指针的优点与缺点
    公众号 苹果端点击事件委托不起作用而安卓可以
    php emoji表情转换
    PHP 获取网页所有链接
    node 一行一行的读取文件
    AsyncJS 异步流程控制DEMO详细介绍
    node.js 获取异步方法里面数据 的方式
    利用blob 加密防下载
    html css 3D轮播图
    transform和transition组合动画错误问题
  • 原文地址:https://www.cnblogs.com/eer123/p/9467848.html
Copyright © 2011-2022 走看看