1. 程式人生 > >使用log4jdbc記錄SQL資訊

使用log4jdbc記錄SQL資訊

一、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,console
log4j.appender.console=org.apache.log4j.ConsoleAppender 
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss.SSS} %m%n%n
log4j.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:10
10 timeBetweenEvictionRunsMillis:60000
11 minEvictableIdleTimeMillis:300000
12 validationQuery:SELECT 'x'
13 testWhileIdle:true
14 testOnBorrow:false
15 testOnReturn:false
16 removeAbandoned:false
17 removeAbandonedTimeout:1800
18 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 xudp
22  * @version 1.0 V
23  * @createTime 2014-11-5 下午01:49:49
24  */
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資訊

一、log4jdbc的簡單介紹   使用log4jdbc在不改變原有程式碼的情況下,就可以收集執行的SQL文和JDBC執行情況。   平時開發使用的ibatis,hibernate,spring jdbc的sql日誌資訊,有一點個缺點是佔位符與引數是分開列印的,如果想要拷

log4jdbc記錄SQL資訊

一、log4jdbc的簡單介紹 使用log4jdbc在不改變原有程式碼的情況下,就可以收集執行的SQL文和JDBC執行情況。   平時開發使用的ibatis,hibernate,spring jdbc的sql日誌資訊,有一點個缺點是佔位符與引數是分開列印的,如果想要拷

log4jdbc記錄全部SQL日誌

og4jdbc 是工作在jdbc層的一個日誌框架,能夠記錄SQL及資料庫連線執行資訊。一般的SQL日誌會把具體的引數值用?代替,有時候很不方便,log4jdbc則會記錄資料庫執行的完整SQL字串,在資料庫應用開發除錯階段非常有用。 log4jdbc具有以下特性: •支援J

FIREDAC記錄SQL日誌

tor image mmd true ati als png lin 服務 FIREDAC記錄SQL日誌 跟蹤SQL日誌可以方便開發的時候的程序調試。SQL日誌記錄會耗費服務費資源,正式部署中間件的時候,建議關閉SQL日誌記錄。 FIREDAC通過使用TFDMoniFl

mysql開啟general_log記錄sql執行記錄

mysql開啟general_log記 mysql審計 方法一:更改my.cnf配置文件vi /usr/local/kkmail/config/mysql/my.cnf 將下面兩行註釋取消掉,然後重啟mysql #general_log = 1 #general_log_file = /tmp/kkm

Spring boot 使用logback+log4jdbc列印sql日誌

前言 使用Spring Boot進行開發時,我們為了除錯方便,都需要輸出sql語句,簡單的日誌列印方式,只能顯示sql語句,並不能顯示具體的佔位符的內容,這篇文章主要講解如何使用logback+log4jdbc列印sql日誌並顯示佔位符內容 簡單列印日誌 使用簡單的方式列印sql

記錄sql語句

#同一訂單同一商品評論大於1 select order_id,product_id,count(*) as comment_count from product_comment group by order_id,product_id having count(*)>1 #刪除重複訂單

MariaDB:開啟日誌記錄SQL

1.開啟日誌 紅色是命令,之下是回顯。 MariaDB [jksfrz]> SET GLOBAL log_output = 'TABLE'; Query OK, 0 rows affected (0.000 sec) MariaDB [jksfrz]> SET GLOBAL general_

第三節:使用Log4net和過濾器記錄異常資訊,返回異常給前端

上次面試,遇到,在專案中如何處理業務異常和程式碼異常,使用txt記錄異常資訊後,如何直接區分出異常的型別,異常怎麼分類處理,希望大家能幫我提出寶貴的意見,完善處理異常, 統一返回引數 public class HeaderResult { public HeaderR

用group by 分組後,沒有分組的欄位隨便取一條記錄sql如何寫?

假設表有order_info_details  訂單詳情表 欄位包含: 大家都知道,訂單詳情表中,就存的是一個訂單號有多個食物id。 那麼我們group by order_id後,就只能得到order_id。 但是我們想要得到同一個order_id中的某一條完整的

微服務框架使用p6spy監控Oracle資料庫列印sql資訊

1.新增jar。我們是maven專案。 <dependency>     <groupId>p6spy</groupId>     <artifactId>p6spy</artifactId>     <ve

架構篇--系統監控--spring-boot2.0.X 系統原生資訊監控,SQL資訊監控,cpu溫度監控報警,cup磁碟記憶體使用率監控報警,自定義端點監控以及子節點獲取,系統異常郵件通知

架構篇–系統監控–spring-boot2.0.X 系統原生資訊監控,SQL資訊監控,cpu溫度監控報警,cup磁碟記憶體使用率監控報警,自定義端點監控以及子節點獲取,加工原生端點,系統異常郵件通知,ui介面spring-boot-admin2.0整合等等內容

@ControllerAdvice,ResponseBodyAdvice記錄日誌資訊

我在專案中的用到@ControllerAdvice,ResponseBodyAdvice beforeBodyWrite方法中內容大概如下: 可以在返回的body中加入其他資訊 ResponseResult result =(ResponseResult)body; result.s

django log日誌模組無法正常工作,記錄日誌資訊

背景描述: 使用gunicorn +django +nginx部署, 在指定目錄會自動建立info.log ,error.log,warn.log 螢幕上可以正常顯示日誌資訊 沒有往日誌檔案寫入資訊 使用runserver啟動服務

PostgreSQL技術週刊第13期:PSQL新增變數記錄SQL語句的執行情況和錯誤

PostgreSQL(簡稱PG)的開發者們: 雲棲社群已有5000位PG開發者,釋出了3000+PG文章(文章列表),沉澱了700+的PG精品問答(問答列表)。 PostgreSQL技術週刊將會為大家介紹最新的PG技術與動態、預告活動、最熱問答、直播教程等,歡迎大家訂閱PostgreSQL技術週刊和關注P

mysql如何記錄sql執行時間

1、開啟和關閉mysql> set profiling=1;mysql> set profiling=0; information_schema 的 database 會建立一個PROFIL

Java web中使用Log4j記錄日誌資訊

最近想記錄一下Log4j的使用,抽了點時間通過收集網上的資料整理了這份部落格,希望給需要用Log4j記錄日誌的朋友一點幫助,若有不對的地方,望指正。 Log4j是Apache的一個開源專案,通過使用Log4j,我們可以控制日誌資訊輸送的目的地是控制檯、檔案GUI組建,甚至是

資料庫只取前多少行記錄sql

資料庫中只取前多少行記錄的sql語句,下面是一些例子,本人經常用到的是Oracle和db2 1. ORACLE (親測) SELECT * FROM TABLENAME WHERE ROWNUM<=N 2. INFORMIX     SELECT FIRST N

使用localstorage和cookie記錄登入資訊

對於cookies和localstorage在專案中使用頻率還是很高的,常見的方法就是使用jquery的外掛jquery.cookie.js,此次由於專案比較小,就沒打算引入那麼多外掛,其實之前也寫過幾次,由於程式碼不多,這次也就再次實現了一次,權當是複習一下cookie和

關於ThinkPHP5.1+的Log無法記錄SQL除錯記錄的小經歷

    專案開發階段,除了基本編碼外,效能也需要實時關注與優化。之前我的大部分專案都是使用ThinkPHP5.