`

P6Spy的去掉ResultSet以及加入每日归档

阅读更多

P6Spy的去掉ResultSet以及加入每日归档

 

P6Spy是一个很好的在ssh下进行数据库日志操作的工具,可以记录用户的查询操作,缺点:(1)对与每一个查询的结果集都会记录下来,这样当数据库表中数据量大的时候,日志的膨胀速度无法估计,经常是上GB级的log文件,无法打开,成了死的文件。(2)不支持每天生成一份日志记录,这样不便于只查看某天的数据库操作日志,当累积天数过多时也会造成日志文件的过于庞大,无法查看。
下面进行改造:
一、去掉结果集
这一步主要是包括修改com.p6spy.engine.logging.P6LogResultSet,修改其中的next方法如下:
public boolean next() throws SQLException {
  long startTime = System.currentTimeMillis();
  try {
    return super.next();
  } finally {
    P6Connection p6connection = (P6Connection) this.statement.getConnection();
    P6LogQuery.logElapsed(p6connection.getId(), startTime, "result",preparedQuery, query);
  }
}
这样就可以在spy.properties中添加resultset来过滤掉结果集了:
excludecategories=info,debug,result,batch,resultset
为了去掉绑定的sql,减小sql语句的长度,修改com.p6spy.engine.logging.appender.FormattedLogger的logSQL方法如下:
public void logSQL(int connectionId, String now, long elapsed, String category, String prepared, String sql) {
  String logEntry = now + "|" + elapsed + "|" 
                 + (connectionId == -1 ? "" : String.valueOf(connectionId))
                    + "|" + category + "|" + sql;
  logText(logEntry);
}

二、每天产生一个文件
这一步主要是在p6spy写入日志的时候截获当前时间,在当前日期文件下进行写入操作。
1)首先在com.p6spy.engine.common.P6SpyOptions加入你自己的日期格式(效仿log4j):
private static String rollingDatePattern;
生成setter和getter方法,如下:
 
public static String getRollingDatePattern() {
  return rollingDatePattern;
}
 
public static void setRollingDatePattern(String rollingDatePattern) {
  if (rollingDatePattern == null)
    rollingDatePattern = "'.'yyyy-MM-dd";
  P6SpyOptions.rollingDatePattern = rollingDatePattern;
}

2)在com.p6spy.engine.common.P6LogQuery中截获日志写入的方法doLog,加入以下内容:
if (logger instanceof FileLogger) {// file logger
  String logfile = P6SpyOptions.getLogfile();
  String suffix = "";
  String dataFormatingSrtyle = P6SpyOptions.getRollingDatePattern();
  if (dataFormatingSrtyle != null) {
    dataFormatingSrtyle = dataFormatingSrtyle.substring("'.'".length());
    SimpleDateFormat sdf = new SimpleDateFormat( dataFormatingSrtyle);
    Date now = new Date();
    suffix = "." + sdf.format(now);
  }
  logfile = (logfile == null) ? "spy.log" + suffix : logfile+ suffix;// logfile
  // name
  ((FileLogger) logger).setLogfile(logfile);// set log file

3)在spy.properties中加入产生每日归档的属性即可:
#gen a databse log file every day
rollingDatePattern='.'yyyy-MM-dd
 
有一些包需要自己找,就是调用ant进行p6spy的源代码重构,改造成自己的p6spy.jar,需要在2003年9月左右的jar包噻,找不到的话就使劲找,不然就删一些无关紧要的文件夹,比如jboss,test之类的,不影响。

分享到:
评论
1 楼 gaoxingang2008 2014-05-15  
改造好的jar能否传一份

相关推荐

    p6spy改造去掉resultset和添加每日归档

    附件中就是p6spy改造去掉resultset和添加每日归档的jar。 方法:打开eclipse,导入-eclipse,进行自己的修改(已改完) 将src复制到-src下面,运行ant命令即可在dist生成p6spy.jar文件 参照sp6.properties进行修改...

    p6spy去除resultset

    注释了一行代码,去除了resalutset结果集,不知道是否符合你们

    p6spy 修改版,去掉resultset

    【标题】"p6spy 修改版,去掉resultset" 是一个针对P6Spy数据库监控工具的定制化版本,主要特点是去除了对`ResultSet`的监控功能。P6Spy是一款广泛使用的开源工具,它允许开发者在不修改应用程序代码的情况下,监控...

    p6spy过滤resultset版

    p6spy支持jpa(如hibernate、ibatis/mybatis)打印完整sql。 此为本人在p6spy源码基础上进行修改,使其能在sql日志中过滤resultset,是sql更简洁,开发更方便。

    p6spy使用说明.doc

    P6Spy是一个强大的开源工具,专门用于监控JDBC连接,特别是在SpringBoot环境下,它可以提供对Oracle数据库查询执行时长的详细分析。P6Spy的工作原理是通过代理模式,拦截SQL语句并记录其执行情况,这有助于开发者...

    下载 p6spy.jar (内含使用步骤)

    **P6Spy 简介** P6Spy 是一个开源的数据库监控工具,它能够记录并分析应用程序与数据库之间的所有SQL交互。对于开发者而言,P6Spy 是一个强大的调试和性能分析工具,尤其在使用MyBatis或Hibernate等ORM框架时,能够...

    p6spy java 使用

    一旦启用 P6Spy,每次应用程序执行 SQL 语句时,P6Spy 都会记录这些 SQL 的详细信息,包括执行前后的原始 SQL、执行参数、返回结果以及执行时间等,这对于性能调优和问题排查非常有用。 【排除ResultSet】 P6Spy ...

    p6spy 在weblogic中的配置 以及使用sqlprofiler监控

    **P6Spy与WebLogic配置及SQLProfiler监控详解** ...这个过程涉及到对WebLogic数据源的配置、P6Spy代理驱动的使用以及`spy.properties`的定制。理解这些知识点对于监控和优化Java应用的数据库性能至关重要。

    P6SPY JDBC拦截打印sql语句 非常好的调试工具

    P6spy是一个JDBC Driver的包装工具,p6spy通过对JDBC Driver的封装以达到对SQL语句的监听和分析,以达到各种目的。 p6spy的安装步骤: 1. 下载p6spy的安装包 2. 把p6spy的jar包放到Classpath中,如果是WEB App...

    p6spy-sql监控

    4. **配置数据库连接**:在应用程序的数据库连接URL中加入P6Spy的特定后缀,例如`jdbc:p6spy:mysql://localhost:3306/mydatabase`。 5. **启动应用**:重新启动应用,P6Spy即开始生效。 ### 四、日志分析与性能...

    p6spy简介显示hibernate配置

    **P6Spy简介** P6Spy是一款开源的Java数据库监控工具,它允许开发者在不修改应用程序代码的情况下,透明地监控数据库活动。P6Spy通过拦截并记录JDBC调用来获取数据库查询、更新和其他操作的详细信息,这对于性能...

    myeclipse配置p6spy以及导入源码

    在介绍如何在MyEclipse中配置P6Spy以及导入其源码之前,首先需要了解P6Spy是一款什么工具。P6Spy是一个开源的应用程序,它允许开发者在Java应用程序中监控和记录对数据库的SQL调用。这对于数据库查询的性能分析和...

    p6spy去掉结果集版

    p6spy去掉结果集版 我的博客有相关的使用说明.

    p6spy.jar 可配置是否需要resultset

    p6spy.jar 可配置是否需要resultset, excludecategories=info,debug,result,batch,resultset

    借鉴p6spy,实现自己的SQL执行监控器项目源代码

    P6Spy是一个广泛使用的开源框架,它允许开发者无侵入地监控和记录应用程序中的所有SQL语句。这个项目的目标是借鉴P6Spy的部分源码,创建一个自定义的SQL执行监控器,以满足特定的需求或提供更定制化的功能。 P6Spy...

    采用p6spy完整显示hibernate的SQL语句

    在这种情况下,P6Spy是一个非常有用的工具。P6Spy是一个开源的JDBC代理库,它允许我们监控并记录应用通过JDBC执行的所有数据库操作,包括那些由Hibernate生成的SQL语句。它不仅可以提供完整的SQL语句,还能够提供...

    p6spy-3.7.0.zip

    《P6Spy 3.7.0:数据库监控与性能优化利器》 P6Spy 是一个开源的数据库监视工具,它允许开发者在不修改应用程序代码的情况下,对数据库访问进行监听、记录和分析。P6Spy 的3.7.0版本为开发者提供了更强大的功能和...

    P6Spy 提供数据库性能监控和剖析工具

    P6Spy 是一个可以用来在应用程序中拦截和修改数据操作语句的开源框架。通过 P6Spy 我们可以对 SQL 语句进行拦截,相当于一个 SQL 语句的记录器,这样我们可以用它来作相关的分析,比如性能分析。P6Spy 用 Log4J 来...

    使用P6spy打印ibatis执行的SQL语句

    1. **安装P6Spy**:首先,从P6Spy的官方网站下载最新版本的P6Spy库,并将其添加到项目的类路径中。这通常涉及到修改`pom.xml`文件(对于Maven项目)或`build.gradle`文件(对于Gradle项目)。 2. **配置P6Spy**:在...

Global site tag (gtag.js) - Google Analytics