P6SPY、SQL Profiler结合使用

弄hibernate时,想显示sql语句,可以设置show_sql为true来达到这个目的,但是参数值全是像PreparedStatement一样,用?来代替的。
用p6spy可以达到显示的那些参数原值的目的,但可读性差。可以利用SQL Profiler来处理这个事情。
p6spy: http://sourceforge.net/projects/p6spy/
SQL Profile: http://sourceforge.net/projects/sqlprofiler/

p6spy安装:
* 将p6spy.jar放到WEB-INF/lib目录下,将spy.properties放到WEB-INF/classes目录下。
* 修改你 原有 JDBC Driver为:com.p6spy.engine.spy.P6SpyDriver
* 修改 spy.properties 中的 realdriver 值为 原有 的JDBC Driver,比如我的是:com.mysql.jdbc.Driver
* 完成,运行web server。

我的日志记录产生在 %TOMCAT_HOME%\logs下,此log位置可以通过修改 logfile  = x:\**\*spy.log 来控制
打开看看,看里面的日志是不是看起来比较不爽?下面我们安装SQL Profiler来让自已的视线爽一点。

SQL Profiler安装:(须p6spy成功安装)
* 将SQL Profiler自带的spy.properties覆盖原来的classes目录下文件
* 修改现在spy.properties中realdriver 值为 原有 的JDBC Driver
看后看看readme注意这几句 ^__^ :
1. Start the GUI
2. Start the webapp, in starts doing some JDBC requests we will ignore
3. Press the "reset" button on the GUI
4. Make a request to the webapp
5. Press the "pause" button after the request has finished executing
6. Press the "report" button to save profiling results as a CSV file

* 我们先用java -jar sqlprofiler.jar 运行 sql profiler
* 然后启动web server :-)

一切尽在眼前了吧?
当然,p6spy 和 sql profiler 能做的不止这些,sql profiler还能根据你的query来帮你生成建立合适的index功能等等。

详细配置 spy.properties 说明
#### 当'SQLPROFILER_CLIENT'启用时:
####   1.必须为Log4jLogger
####   2.必须先运行对应RemoteHost上的sqlprofiler.jar,否则会报socket异常  

#specifies the appender to use for logging
appender=com.p6spy.engine.logging.appender.Log4jLogger
#appender=com.p6spy.engine.logging.appender.StdoutLogger
#appender=com.p6spy.engine.logging.appender.FileLogger

#...
#...

#### p6spy 输出到 sqlprofiler 终端日志配置 
log4j.appender.SQLPROFILER_CLIENT=org.apache.log4j.net.SocketAppender
# sqlprofiler 终端所在IP
log4j.appender.SQLPROFILER_CLIENT.RemoteHost=localhost
# sqlprofiler 终端所使用端口号
log4j.appender.SQLPROFILER_CLIENT.Port=4445
log4j.appender.SQLPROFILER_CLIENT.LocationInfo=true

log4j.logger.p6spy=DEBUG, SQLPROFILER_CLIENT

你可能感兴趣的:(sql,Web,log4j,SQL Server,jdbc)