badqiu

          XPer
          隨筆 - 46, 文章 - 3, 評(píng)論 - 195, 引用 - 0
          數(shù)據(jù)加載中……

          log4jdbc日志框架介紹

           

          現(xiàn)大家使用的ibatis,hibernate,spring jdbc的sql日志信息,有一點(diǎn)個(gè)缺點(diǎn)是占位符與參數(shù)是分開(kāi)打印,如果想要拷貝sqlPLSQL Developer客戶(hù)端直接執(zhí)行,需要自己拼湊sql。而log4jdbc是在jdbc層的一個(gè)日志框架,可以將占位符與參數(shù)全部合并在一起顯示,方便直接拷貝sqlPLSQL Developer等客戶(hù)端直接執(zhí)行,加快調(diào)試速度。

          .簡(jiǎn)單介紹:

          1.沒(méi)有使用log4jdbcsql顯示:

           

          select username,password from bitth_date > ? and age < ? and username = ?

          2.使用log4jdbcsql顯示:

          select username,password from bitth_date > to_date(‘2010-11-11’,’yyyy-mm-dd’) and age < 20 and username = ‘qq2008’ {executed in 2 msec}


          這樣就可以直接拷貝上面的sqlPLSQL直接執(zhí)行. 最后的 {executed in 2 msec} SQL執(zhí)行時(shí)間.而如果mysql,日志信息將不會(huì)出現(xiàn) to_date()

          .log4jdbc使用:

          1.spring xml配置(攔截需要處理的dataSource連接)

              <bean id="log4jdbcInterceptor" class="net.sf.log4jdbc.DataSourceSpyInterceptor" />
              
          <bean id="dataSourceLog4jdbcAutoProxyCreator" class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
                 
          <property name="interceptorNames">
                     
          <list>
                        
          <value>log4jdbcInterceptor</value>        
                     
          </list>
                 
          </property>
                 
          <property name="beanNames">
                     
          <list>
                        
          <value>dataSource</value>
                     
          </list>
                 
          </property>
              
          </bean>

          2.log4j.properties配置:

           

          log4j.logger.jdbc.sqlonly=OFF
          log4j.logger.jdbc.sqltiming
          =INFO
          log4j.logger.jdbc.audit
          =OFF
          log4j.logger.jdbc.resultset
          =OFF
          log4j.logger.jdbc.connection
          =OFF

           

          (日志信息如果全部為off,log4jdbc將不會(huì)生效,因此對(duì)性能沒(méi)有任何影響)

          3.下載slf4j

          log4jdbc需要依賴(lài)slf4j日志框架. http://www.slf4j.org/

          三.擴(kuò)展說(shuō)明

          DataSourceSpyInterceptor為我自己擴(kuò)展的一個(gè)攔截器類(lèi),擴(kuò)展主要是使用AOP的方式,因?yàn)閘og4jdbc原來(lái)的方式不適合我的項(xiàng)目.具體源碼為:

           

           

          import org.aopalliance.intercept.MethodInterceptor;
          import org.aopalliance.intercept.MethodInvocation;
          public class DataSourceSpyInterceptor implements MethodInterceptor {
           
          private RdbmsSpecifics rdbmsSpecifics = null;
           
              
          private RdbmsSpecifics getRdbmsSpecifics(Connection conn) {
                  
          if(rdbmsSpecifics == null) {
                      rdbmsSpecifics 
          = DriverSpy.getRdbmsSpecifics(conn);
                  }
                  
          return rdbmsSpecifics;
              }
              
           
          public Object invoke(MethodInvocation invocation) throws Throwable {
            Object result 
          = invocation.proceed();
            
          if(SpyLogFactory.getSpyLogDelegator().isJdbcLoggingEnabled()) {
                
          if(result instanceof Connection) {
                 Connection conn 
          = (Connection)result;
                 
          return new ConnectionSpy(conn,getRdbmsSpecifics(conn));
                }
            }
            
          return result;
           }
          }

           

          四.相關(guān)下載:

           

          log4jdbc: http://code.google.com/p/log4jdbc/

          另外一個(gè)對(duì)log4jdbc的擴(kuò)展: http://code.google.com/p/log4jdbc-remix/

           

           

          posted on 2010-08-20 14:07 badqiu 閱讀(5310) 評(píng)論(8)  編輯  收藏

          評(píng)論

          # re: log4jdbc日志框架介紹  回復(fù)  更多評(píng)論   

          好東東。。。
          2010-08-20 14:22 | melin

          # re: log4jdbc日志框架介紹  回復(fù)  更多評(píng)論   

          用p6spy也可以解決此問(wèn)題
          2010-08-20 16:08 | cxh8318

          # re: log4jdbc日志框架介紹[未登錄](méi)  回復(fù)  更多評(píng)論   

          不錯(cuò)的東西,剛看了。
          還有cxh8318介紹的P6Spy已經(jīng)是2003年到現(xiàn)在沒(méi)有更新的東西了。
          而現(xiàn)在都是jdbc4了
          2010-08-20 16:39 | alan

          # re: log4jdbc日志框架介紹  回復(fù)  更多評(píng)論   

          借用hibernate sql格式化工具類(lèi),把sql格式化一把。這樣可以把hibernate.show_sql設(shè)置為false。

          修改Slf4jSpyLogDelegator類(lèi)

          out.append(sql);
          out.append(" {executed in ");
          out.append(execTime);
          out.append(" msec}");
          BasicFormatterImpl format = new BasicFormatterImpl();
          return format.format(out.toString());
          2010-08-20 17:05 | melin

          # re: log4jdbc日志框架介紹[未登錄](méi)  回復(fù)  更多評(píng)論   

          melin你太有才了,是個(gè)不錯(cuò)的想法。哈!!!
          2010-08-20 18:14 | badqiu

          # re: log4jdbc日志框架介紹  回復(fù)  更多評(píng)論   

          log4jdbc 在那個(gè)地方可以修改執(zhí)行的sql語(yǔ)句。
          2010-08-22 16:51 | melin

          # re: log4jdbc日志框架介紹[未登錄](méi)  回復(fù)  更多評(píng)論   

          非常好的東東,實(shí)在太感謝了,哥們兒
          2010-08-23 16:42 | Nicholas

          # re: log4jdbc日志框架介紹[未登錄](méi)  回復(fù)  更多評(píng)論   

          非常好,就是下載的時(shí)候 還差一點(diǎn) 就是下不來(lái)
          2013-08-06 19:56 | 歐陽(yáng)

          只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 云林县| 石城县| 从江县| 布拖县| 依安县| 保山市| 蓝山县| 靖西县| 黄龙县| 屏山县| 清水县| 灌阳县| 长汀县| 巴彦淖尔市| 苍梧县| 清丰县| 乡宁县| 灌阳县| 绥化市| 萨迦县| 进贤县| 秦安县| 芦溪县| 资中县| 繁峙县| 肥城市| 安康市| 藁城市| 连城县| 上思县| 安塞县| 和平区| 孝义市| 昌黎县| 射阳县| 响水县| 建宁县| 嫩江县| 丰县| 侯马市| 石柱|