概述
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日志记录和分析所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复