我是靠谱客的博主 要减肥云朵,最近开发中收集的这篇文章主要介绍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

最后

以上就是要减肥云朵为你收集整理的jdbc访问mysql日志_用p6spy来进行jdbc sql日志记录和分析的全部内容,希望文章能够帮你解决jdbc访问mysql日志_用p6spy来进行jdbc sql日志记录和分析所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(36)

评论列表共有 0 条评论

立即
投稿
返回
顶部