轉】使用log4jdbc記錄SQL資訊

來源:互聯網
上載者:User

標籤:adb   ssm   psi   sub   v2x   kmp   pl2   參數   pmu   

原博文出自於:  http://www.cnblogs.com/xdp-gacl/p/4081848.html      感謝!

 

 

 

一、log4jdbc的簡單介紹

  使用log4jdbc在不改變原有代碼的情況下,就可以收集執行的SQL文和JDBC執行情況。

  平時開發使用的ibatis,hibernate,spring jdbc的sql日誌資訊,有一點個缺點是預留位置與參數是分開列印的,如果想要拷貝sql至PLSQL Developer用戶端直接執行,需要自己拼湊sql。而log4jdbc是在jdbc層的一個日誌架構,可以將佔位符與參數全部合并在一起顯示,方便直接拷貝sql在PLSQL Developer等用戶端直接執行,加快調試速度。

 

 

二、log4jdbc的使用

  下載log4jdbc的jar包log4jdbc-1.2.jar以及依賴的相關Jar包log4j-1.2.17.jar、slf4j-api-1.6.0.jar、slf4j-log4j12-1.7.7.jar,如所示:

  

  配置log4j的log4j.properties的設定檔,如下所示:

log4j.logger.jdbc.sqlonly=DEBUG,consolelog4j.appender.console=org.apache.log4j.ConsoleAppender log4j.appender.console.layout=org.apache.log4j.PatternLayoutlog4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss.SSS} %m%n%nlog4j.logger.jdbc.sqltiming=INFO,console  log4j.logger.jdbc.connection=INFO,console

  修改dbconfig.properties設定檔的url和driverClassName

 1 url:jdbc:log4jdbc:mysql://localhost:3306/xdptest 2 driverClassName:net.sf.log4jdbc.DriverSpy 3 username:root 4 password:root 5 filters:stat 6 maxActive:200 7 initialSize:20 8 maxWait:60000 9 minIdle:1010 timeBetweenEvictionRunsMillis:6000011 minEvictableIdleTimeMillis:30000012 validationQuery:SELECT ‘x‘13 testWhileIdle:true14 testOnBorrow:false15 testOnReturn:false16 removeAbandoned:false17 removeAbandonedTimeout:180018 logAbandoned:true

  經過這樣的配置之後,就可以使用log4jdbc記錄應用系統執行的SQL資訊了。

  編寫一個測試Servlet進行測試,代碼如下:

 1 /** 2  *  3  */ 4 package me.gacl.web.controller; 5  6 import java.io.IOException; 7 import java.sql.Connection; 8 import java.sql.PreparedStatement; 9 import java.sql.SQLException;10 import java.util.UUID;11 import javax.servlet.ServletException;12 import javax.servlet.http.HttpServlet;13 import javax.servlet.http.HttpServletRequest;14 import javax.servlet.http.HttpServletResponse;15 import me.gacl.util.DataSourceUtil;16 17 /**18  * <p>ClassName: TestServlet<p>19  * <p>Description: <p>20  * <p>Company:廣州利迪網路科技有限公司 <p>    21  * @author xudp22  * @version 1.0 V23  * @createTime 2014-11-5 下午01:49:4924  */25 public class TestServlet extends HttpServlet {26 27     public void doGet(HttpServletRequest request, HttpServletResponse response)28             throws ServletException, IOException {29         String sql = "INSERT INTO LD_USER(ID,USERNAME,USERCODE,PASSWORD) VALUES(?,?,?,?)";30         Connection connection = DataSourceUtil.getConnection();31         PreparedStatement pstmt = null;32         try {33             pstmt = connection.prepareStatement(sql);34             pstmt.setString(1, UUID.randomUUID().toString());35             pstmt.setString(2, "孤傲蒼狼");36             pstmt.setString(3, "gacl");37             pstmt.setString(4, "xdp");38             int executeResult = pstmt.executeUpdate();39         } catch (SQLException e) {40             e.printStackTrace();41         }finally{42             try {43                 pstmt.close();44                 connection.close();45             } catch (SQLException e) {46                 e.printStackTrace();47             }48         }49     }50 51     public void doPost(HttpServletRequest request, HttpServletResponse response)52             throws ServletException, IOException {53         this.doGet(request, response);54     }55 }

  訪問TestServlet,執行doGet方法往資料庫中插入資料,log4jdbc記錄的SQL資訊如所示:

  

  可以看到,log4jdbc記錄出了SQL的執行的時間,執行時的參數以及執行耗時。這對於我們在開發中尋找SQL錯誤是非常有協助的。

轉】使用log4jdbc記錄SQL資訊

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.