jdbc访问mysql日志_用p6spy来进行jdbc sql日志记录和分析

1.相关工具下载:

p6spy: http://heanet.dl.sourceforge.net/sourceforge/p6spy/p6spy-install.zip

http://www.p6spy.com/download.html

2.解压p6spy-install.zip,把p6spy.jar和spy.properties放到classpath中。

修改spy.properties

logfile = log/anly/dbspy.log

realdriver=oracle.jdbc.driver.OracleDriver

3.在设置数据源或者配置数据库连接的地方,

修改driver为:

drivers=com.p6spy.engine.spy.P6SpyDriver

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之类的,不影响

spy.properties文件配置:oracle

realdriver=oracle.jdbc.driver.OracleDriver

reload = false

stacktrace = false

module.log=com.p6spy.engine.logging.P6LogFactory

appender=com.p6spy.engine.logging.appender.StdoutLogger

log4j.logger.p6spy=warn,STDOUT

dateformat=hh:mm:ss

useprefix=false

#excludecategories=next, commit,

close, prepareStatement, setAutoCommit, acceptsURL, connect,

setReadOnly

excludecategories=info,debug,result,batch,resultset,statement//过滤打印的语句

exclude=users,contants

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值