使用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.