日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

如何有效地记录 Java SQL 日志(转)

發布時間:2025/7/14 java 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何有效地记录 Java SQL 日志(转) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在常規項目的開發中可能最容易出問題的地方就在于對數據庫的處理了,在大部分的環境下,我們對數據庫的操作都是使用流行的框架,比如 Hibernate 、 MyBatis 等。由于各種原因,我們有時會想知道在這些框架下實際執行的 SQL 究竟是什么。

雖然 Hibernate 可以在配置文件中打開 SHOW SQL 的功能, MyBatis 則可以在 Log4j 的配置文件中配置 SQL 語句的輸出,但這些輸出是類似這樣的 INSERT … ? ? ? 語句,并不是一個完整可以運行的 SQL ,要想知道完整的 SQL 需要手動把參數補齊,如果要調試這樣的 SQL 無疑非常痛苦。

Log4jdbc 是一個開源 SQL 日志框架,它使用代理模式實現對常用的 JDBC Driver( Oracle , Derby , MySQL , PostgreSQL , H2 , HSQLDB , …)操作的攔截,記錄真實 SQL ,可以將占位符與參數全部合并在一起顯示,方便直接拷貝 SQL 在 MySQL 等客戶端直接執行,加快調試速度。本文主要介紹如何使用 Log4jdbc 這個可以直接顯示完整 SQL 的日志框架,希望對大家能有所幫助。

Log4jdbc 的特點:

Log4jdbc 的官方主頁是?https://github.com/arthurblake/log4jdbc?,它具有以下特點:

  • 完全支持 JDBC3 和 JDBC4

  • 配置簡單,在大多數情況下,只需要將 JDBC 驅動類改成 net.sf.log4jdbc.DriverSpy ,同時將 jdbc:log4jdbc 添加到現有的 JDBC URL 之前,最后配置日志記錄的種類即可

  • 將 Prepared Statements 中的綁定參數自動插入到對應的位置。在大多數情況下極大改善了可讀性及調試工作

  • SQL 的耗時信息能被獲取從而幫助判斷哪些語句執行得過慢,同時這些信息可以被工具識別得到一個關于慢 SQL 的報表

  • SQL 連接信息也可以獲取從而幫助診斷關于連接池或線程的問題

  • 兼容任何 JDBC 驅動,需要 JDK1.4 及以上與 Slf4j1.x

  • 開源軟件,使用 Apache 2.0 License

使用 Log4jdbc 的步驟:

感興趣的朋友可以去 Log4jdbc 的項目主頁看它的使用方法,如果單純使用 Log4jdbc ,不會對 ResultSet 以表格方式呈現,在這里我們使用擴展自 Log4jdbc 的日志框架 Log4jdbc-log4j2 ,它增加了對 ResultSet 以表格方式呈現的處理,項目主頁是:?https://code.google.com/p/log4jdbc-log4j2/?。它的使用步驟如下:

1、決定使用哪個版本的 JAR 包:

如果使用 JDK1.5 , 應該使用 JDBC3 版本的 JAR 包即 log4jdbc-log4j2-jdbc3.jar 。

如果使用 JDK1.6 , 應該使用 JDBC4 版本的 JAR 包即 log4jdbc-log4j2-jdbc4.jar (即使實際使用的 JDBC 驅動是 JDBC3 的甚至更老)。

如果使用 JDK1.7 , 應該使用 JDBC4.1 版本的 JAR 包即 log4jdbc-log4j2-jdbc4.1.jar (即使實際使用的 JDBC 驅動是 JDBC3 的甚至更老)。

2、將 JAR 包添加進項目:

將 JAR 包添加進項目有兩種方式,第一種是直接將 Log4jdbc-log4j2 和 Slf4j 的 JAR 包添加進 CLASSPATH 中,第二種是使用 MAVEN 方式引入 JAR 包,這里我們主要說明第二種方式。在 pom.xml 文件中,根據使用的 JDBC 驅動的版本來替換 log4jdbc-log4j2-jdbcXX (比如 log4jdbc-log4j2-jdbc4.1 , 或者 log4jdbc-log4j2-jdbc4 , 或者 log4jdbc-log4j2-jdbc3 )。該框架需要配合 Slf4j 一起使用,MAVEN 配置如下:

<dependency><groupId>org.bgee.log4jdbc-log4j2</groupId> <artifactId>log4jdbc-log4j2-jdbcXX</artifactId> <version>1.16</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>jcl-over-slf4j</artifactId> <version>1.7.2</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.2</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.2</version> </dependency>

3、將項目的配置文件中的 JDBC 驅動類改成 net.sf.log4jdbc.sql.jdbcapi.DriverSpy 。

4、將 jdbc:log4 添加到現有的 JDBC URL 之前:

例如原來的 JDBC URL 是

jdbc:mysql://localhost:3306/MyDatabase

,則應該改成:

jdbc:log4jdbc:mysql://localhost:3306/MyDatabase

5、配置日志記錄的種類:

Log4jdbc 用以下幾個可以配置的日志種類:

  • jdbc.sqlonly : 僅記錄 SQL

  • jdbc.sqltiming :記錄 SQL 以及耗時信息

  • jdbc.audit :記錄除了 ResultSet 之外的所有 JDBC 調用信息,會產生大量的記錄,有利于調試跟蹤具體的 JDBC 問題

  • jdbc.resultset :會產生更多的記錄信息,因為記錄了 ResultSet 的信息

  • jdbc.connection :記錄連接打開、關閉等信息,有利于調試數據庫連接相關問題

以上日志種類都可以設置為 DEBUG , INFO 或 ERROR 級別。當設置為 FATAL 或 OFF 時,意味關閉記錄。

以下是一個采用 Log4j 作為具體日志系統的典型配置,將這些配置到 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

6、添加 log4jdbc.log4j2.properties 文件:

這是最后一步,在項目的 CLASSPATH 路徑下創建一個 log4jdbc.log4j2.properties 文件,告訴 Log4jdbc-log4j2 使用的是 Slf4j 來記錄和打印日志,在該配置文件里增加:

log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator

最后,運行一下項目,看看效果。

效果:

上圖可以看出,兩個 SELECT 語句的執行時間分別是 117 和 552 毫秒,這對于開發調試還是很有幫助的。現在很多項目的壓測時和上線后,基本都在使用?OneAPM?,它的數據庫監控分析功能更強大一些,不僅可以記錄 SQL 日志,還可以定位到操作 SQL 的?Java?代碼行,直接在網頁上就可以看到效果,使用體驗還是不錯的。

?

http://www.cnblogs.com/oneapm/p/4828243.html

總結

以上是生活随笔為你收集整理的如何有效地记录 Java SQL 日志(转)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。