用来给jdbc驱动加一层监控,打印出来所有的语句
p6spy.jar和spy.properties放到classpath中。
修改spy.properties
logfile = log/anly/dbspy.log
realdriver=oracle.jdbc.driver.OracleDriver
修改spy.properties
logfile = log/anly/dbspy.log
realdriver=oracle.jdbc.driver.OracleDriver
替换驱动。修改driver为:
drivers=com.p6spy.engine.spy.P6SpyDriver
drivers=com.p6spy.engine.spy.P6SpyDriver
自定义log输出
realdriver=oracle.jdbc.driver.OracleDriver
reload = false
stacktrace = false
module.log=com.p6spy.engine.logging.P6LogFactory
#appender=com.p6spy.engine.logging.appender.StdoutLogger
#appender=com.p6spy.engine.logging.appender.FileLogger
appender=com.a.LogbackLogger ########改为自己定义的logger
log4j.logger.p6spy=warn,STDOUT
dateformat=hh:mm:ss
useprefix=false
package com.a;
import com.p6spy.engine.logging.appender.StdoutLogger;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class LogbackLogger extends StdoutLogger{
private static final Logger logger = LoggerFactory.getLogger("p6spy");
public String getLastEntry() {
return lastEntry;
}
public void setLastEntry(String lastEntry) {
this.lastEntry = lastEntry;
}
protected String lastEntry;
@Override
public void logSQL(int connectionId, String s, long l, String category, String s1,String sql) {
//if (!"resultset".equals(category)) {
//logger.info(trim(s1));
System.out.println("+++++++++++++++++log++++begin++++++++++++++++++++++++++");
System.out.println(s);
System.out.println(category);
System.out.println(s1);
System.out.println(sql);
System.out.println("+++++++++++++++++log++++end+++++++++++++++++++++++++++");
//logger.info(trim(sql));
//}
}
@Override
public void logException(Exception e) {
logger.error(e.getMessage(),e);
}
@Override public void logText(String s) {
//logger.info(s);
System.out.println("00000");
System.out.println( s );
this.setLastEntry(s);
}
private String trim(String sql){
StringBuilder sb = new StringBuilder("\r\n");
sb.append(sql.replaceAll("\n|\r|\t|' '"," "));
return sb.toString();
}
}
com.a.LogbackLogger.logSQL(int, String, long, String, String, String)
这个函数是关键。
spy。properties里,
excludecategories=info,debug,result,batch,resultset,statement
是过滤掉哪些 categories
statement是语句如select update delete
result和resultset
是查询结果。最好不要log,因为很多会数据量大
参考:
http://blog.sina.com.cn/s/blog_99201d8901012cy8.html
https://blog.csdn.net/wenbing756169311/article/details/50594241