让log4j输出完整的sql语句(p6spy)

采用p6spy打印hibernate的SQL语句在log日志中
   虽然在hibernate中有show_sql选项;设置为true就可以打印出
sql,但只是在控制台打印,没法打到log文件中(至少我还不会.哪位大虾会.请指点一二
拜谢了)
   p6spy是一个开源软件,可以跟踪任何使用jdbc的应用产生的数据库操作。
\说白了就是个jar 呵呵 因为下载了就是一个jar
    官方:http://www.p6spy.com/
  目前p6spy适用的应用服务器包括:
jboss,atg,orion,jonas,iplanet,weblogic,websphere,resin,tomcat.
p6spy在tomcat应用程序上安装的步骤:
http://www.p6spy.com/download.html,下载zip包
解压得到p6spy.jar和spy.properties两个文件,其他没用了
将p6spy.jar 放入应用程序的WEB-INF/lib目录
将spy.properties放入WEB-INF/classes目录
修改spy.properties
realdriver=com.mysql.jdbc.Driver 默认的是这个,是别的数据库;就把这个前面加上
# 在对应的数据库的realdriver前将#去掉
我用的是orcale 在42行,我将55行的mysql #掉了
logfile=f:work/ape-tech/workspase/house/property/log/spy.log
//好像在166行(ctrl+f找找呗)
定义你自己要打印的位置和日志文件名称
   
修改hibernate.xml,修改connection.driver_class的值为com.p6spy.engine.spy.P6SpyDriver
重启tomcat
这样在目录下就生成了spy.log记录了数据库的访问情况;此时没有任何sql打出
驱动程序加载先后的问题解决
如果spy.log里出现
is a real driver in spy.properties, but it has been loaded before p6spy . p6spy will not wrap these connections. Either prevent the driver from loading, or try setting 'deregisterdrivers' to true in spy.properties
主要发现了  'deregisterdrivers' to true 的情况
把spy.properties文件里的deregisterdrivers=false改为true,重新运行即可。
//这个我还不懂为啥,会的请帮忙指出,呵呵
5.在spring 配置文件中配置如下:
<!-- P6SPY dataSource target -->       
   < bean id = "log" 
class = "org.springframework.jdbc.datasource.DriverManagerDataSource" > 
//配置个名称下面调用
   < property name = "driverClassName"       
       value = "oracle.jdbc.OracleDriver" />  //数据库驱动
    < property name = "url"       
      value = "jdbc:oracle:thin:@localhost:1521:china" />   //连接数据库url    
         < property name = "username" value = "china" />    //账号
         < property name = "password" value = "china" />   //密码
     </ bean >       
        //这些其实没必要说了,呵呵 但是尽量详细呗
     <!--   dataSource -->       
     < bean id = "log" class = "com.p6spy .engine.spy.P6DataSource" destroy-method = "close" >     //这样就可以了

好了,大功告成     
有什么不足的和错误的地方,希望大家指出;
         < constructor-arg >          
             < ref local = "dataSourceTarget" /> //      
         </ constructor-arg >          
     </ bean >  

你可能感兴趣的:(Hibernate)