用log4jdbc監控SQL的執行情況

jopen 10年前發布 | 40K 次閱讀 log4jdbc 日志處理

log4jdbc是一個JDBC驅動器,能夠記錄SQL日志和SQL執行時間等信息。log4jdbc使用SLF4J(Simple Logging Facade For Java)作為日志系統。

特性:
1.支持JDBC3和JDBC4,其中JDBC3對應于JDK 1.4 or 1.5,JDBC4要求JDK 1.6或以上。
2.支持現有大部分JDBC驅動。
3.易于配置(在大部分情況下,只需要改變驅動類名并在jdbc url前加上”jdbc:log4“,設置好日志輸出級別)。
4.能夠自動把SQL變量值加到SQL輸出日志中,改進易讀性和方便調試。
5.能夠快速標識出應用程序中執行比較慢的SQL語句。
6.能夠生成SQL連接數信息幫助識別連接池/線程問題。

由于我們的持久層框架采用Ibatis,而系統操作的數據量也非常的大,所有的SQL前線前都必須通過DBA的審核和調優;而為了提升性能,要求所有的SQL都必須用動態綁定的方式,而不能拼裝SQL;這樣在調試SQL時就會有些不方便,而且自己不知道各SQL執行所消耗的時間(公司也有提供 SQLTrace工具,但是用起來比較復雜);以前國際站自己也寫了一個類似的框架alibaba-intl-ark來對Oracle的JDBC驅動進行封裝,也嘗試過使用,使用的結果并不是很理想,兼容性比較差,功能也不是很完善,所以該框架也就沒多少人使用了;

發現log4jdbc之后立馬試用了一把,感覺還不錯的,下面簡單介紹下使用步驟和方法:
1、到官網下載log4jdbc和slf4j的jar包;比如log4jdbc3-1.1.jar、slf4j-api-1.5.0.jar,對于slf4j要看系統到底使用什么log框架,若使用log4j,則需要slf4j-log4j12-1.5.0.jar;

2、將應用中的driver-class設置為net.sf.log4jdbc.DriverSpy;對于常用的jdbc驅動無需其他設置,比如oracle 驅動oracle.jdbc.driver.OracleDriver也已經在默認設置中了,若默認驅動列表中不包括你的應用系統中需要的驅動,那需要通過-Dlog4jdbc.drivers來進行設置系統屬性,支持的默認驅動列表可到官網查看,網址見后;

3、在應用中jdbc url最前面添加jdbc:log4;比如oracle的url就變成了
jdbc:log4jdbc:oracle:thin:@x.x.x.x:1521:dbname;

4、在日志系統中設置jdbc.sqlonly、jdbc.sqltiming等日志級別,可直接將log4jdbc doc中的日志內容copy過去;

5、運行系統測試,到對應日志文件中查看SQL相關信息;

前面提到了基本的log4jdbc配置和功能,除了這些之外,他也還提供一些比較復雜的功能,比如可以通過-Dlog4jdbc.sqltiming.warn.threshold參數設置SQL耗時多少以上就打印warn信息;另外,log4jdbc還提供了一個對日志文件進行分析的腳本;

經測試,log4jdbc不能在XA環境下使用,比如jboss datasource配置中,若以非XA形式local-tx-datasource配置,則沒有問題;若以xa-datasource配置,則無法生效,系統運行時不能取得connection;究其原因的話,是由于log4jdbc針對的是driver-class的封裝,而不是 datasource-class;所以對系統中使用XA的用戶來說就無法使用該框架了,若一定要使用,只能修改成local-tx- datasource類型;

以下是相關鏈接地址
log4jdbc:http://log4jdbc.sourceforge.net/
slf4j:http://slf4j.org/


其它一些類似于 log4jdbc 的庫和工具:

  • P6Spy is probably the most well known JDBC logging driver but it hasn't been updated in about 4 years.
  • SQL Profiler an add-on for P6Spy, also about 4 years out of date.
  • Craftsman Spy appears to overlap quite a bit with the feature set in log4jdbc. This library hasn't been updated in 2 years and depends on Jakarta Commons Logging.
  • JAMon (Java Application Monitor) is a comprehensive application monitor and monitoring API which includes JDBC/SQL monitoring as part of it's very large feature set.
  • JdbcProxy is another sourceforge hosted project. The driver can also emulate another JDBC driver to test the application without a database
  • LogDriver appears to be similiar to log4jdbc and the author has written a nice article on JDBC logging in general and his motivation and experience of writing LogDriver.

 

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!