国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

如何有效地記錄 Java SQL 日志?

godiscoder / 2557人閱讀

摘要:本文主要介紹如何使用這個(gè)可以直接顯示完整的日志框架,希望對(duì)大家能有所幫助。當(dāng)設(shè)置為或時(shí),意味關(guān)閉記錄。

在常規(guī)項(xiàng)目的開(kāi)發(fā)中可能最容易出問(wèn)題的地方就在于對(duì)數(shù)據(jù)庫(kù)的處理了,在大部分的環(huán)境下,我們對(duì)數(shù)據(jù)庫(kù)的操作都是使用流行的框架,比如 Hibernate 、 MyBatis 等。由于各種原因,我們有時(shí)會(huì)想知道在這些框架下實(shí)際執(zhí)行的 SQL 究竟是什么。

雖然 Hibernate 可以在配置文件中打開(kāi) SHOW SQL 的功能, MyBatis 則可以在 Log4j 的配置文件中配置 SQL 語(yǔ)句的輸出,但這些輸出是類(lèi)似這樣的 INSERT … ? ? ? 語(yǔ)句,并不是一個(gè)完整可以運(yùn)行的 SQL ,要想知道完整的 SQL 需要手動(dòng)把參數(shù)補(bǔ)齊,如果要調(diào)試這樣的 SQL 無(wú)疑非常痛苦。

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

Log4jdbc 的特點(diǎn):

Log4jdbc 的官方主頁(yè)是 https://github.com/arthurblake/log4jdbc ,它具有以下特點(diǎn):

完全支持 JDBC3 和 JDBC4

配置簡(jiǎn)單,在大多數(shù)情況下,只需要將 JDBC 驅(qū)動(dòng)類(lèi)改成 net.sf.log4jdbc.DriverSpy ,同時(shí)將 jdbc:log4jdbc 添加到現(xiàn)有的 JDBC URL 之前,最后配置日志記錄的種類(lèi)即可

將 Prepared Statements 中的綁定參數(shù)自動(dòng)插入到對(duì)應(yīng)的位置。在大多數(shù)情況下極大改善了可讀性及調(diào)試工作

SQL 的耗時(shí)信息能被獲取從而幫助判斷哪些語(yǔ)句執(zhí)行得過(guò)慢,同時(shí)這些信息可以被工具識(shí)別得到一個(gè)關(guān)于慢 SQL 的報(bào)表

SQL 連接信息也可以獲取從而幫助診斷關(guān)于連接池或線(xiàn)程的問(wèn)題

兼容任何 JDBC 驅(qū)動(dòng),需要 JDK1.4 及以上與 Slf4j1.x

開(kāi)源軟件,使用 Apache 2.0 License

使用 Log4jdbc 的步驟:

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

1、決定使用哪個(gè)版本的 JAR 包:

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

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

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

2、將 JAR 包添加進(jìn)項(xiàng)目:

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


    org.bgee.log4jdbc-log4j2
    log4jdbc-log4j2-jdbcXX
    1.16


    org.slf4j
    jcl-over-slf4j
    1.7.2


    org.slf4j
    slf4j-api
    1.7.2


    org.slf4j
    slf4j-log4j12
    1.7.2

3、將項(xiàng)目的配置文件中的 JDBC 驅(qū)動(dòng)類(lèi)改成 net.sf.log4jdbc.sql.jdbcapi.DriverSpy 。

4、將 jdbc:log4 添加到現(xiàn)有的 JDBC URL 之前:

例如原來(lái)的 JDBC URL 是

 jdbc:mysql://localhost:3306/MyDatabase 

,則應(yīng)該改成:

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

5、配置日志記錄的種類(lèi):

Log4jdbc 用以下幾個(gè)可以配置的日志種類(lèi):

jdbc.sqlonly : 僅記錄 SQL

jdbc.sqltiming :記錄 SQL 以及耗時(shí)信息

jdbc.audit :記錄除了 ResultSet 之外的所有 JDBC 調(diào)用信息,會(huì)產(chǎn)生大量的記錄,有利于調(diào)試跟蹤具體的 JDBC 問(wèn)題

jdbc.resultset :會(huì)產(chǎn)生更多的記錄信息,因?yàn)橛涗浟?ResultSet 的信息

jdbc.connection :記錄連接打開(kāi)、關(guān)閉等信息,有利于調(diào)試數(shù)據(jù)庫(kù)連接相關(guān)問(wèn)題

以上日志種類(lèi)都可以設(shè)置為 DEBUG , INFO 或 ERROR 級(jí)別。當(dāng)設(shè)置為 FATAL 或 OFF 時(shí),意味關(guān)閉記錄。

以下是一個(gè)采用 Log4j 作為具體日志系統(tǒng)的典型配置,將這些配置到 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 文件:

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

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

最后,運(yùn)行一下項(xiàng)目,看看效果。

效果:

上圖可以看出,兩個(gè) SELECT 語(yǔ)句的執(zhí)行時(shí)間分別是 117 和 552 毫秒,這對(duì)于開(kāi)發(fā)調(diào)試還是很有幫助的?,F(xiàn)在很多項(xiàng)目的壓測(cè)時(shí)和上線(xiàn)后,基本都在使用 OneAPM ,它的數(shù)據(jù)庫(kù)監(jiān)控分析功能更強(qiáng)大一些,不僅可以記錄 SQL 日志,還可以定位到操作 SQL 的 Java 代碼行,直接在網(wǎng)頁(yè)上就可以看到效果,使用體驗(yàn)還是不錯(cuò)的。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/17495.html

相關(guān)文章

  • 如何有效記錄 Java SQL 日志?

    摘要:本文主要介紹如何使用這個(gè)可以直接顯示完整的日志框架,希望對(duì)大家能有所幫助。當(dāng)設(shè)置為或時(shí),意味關(guān)閉記錄。 在常規(guī)項(xiàng)目的開(kāi)發(fā)中可能最容易出問(wèn)題的地方就在于對(duì)數(shù)據(jù)庫(kù)的處理了,在大部分的環(huán)境下,我們對(duì)數(shù)據(jù)庫(kù)的操作都是使用流行的框架,比如 Hibernate 、 MyBatis 等。由于各種原因,我們有時(shí)會(huì)想知道在這些框架下實(shí)際執(zhí)行的 SQL 究竟是什么。 雖然 Hibernate 可以在配置...

    FleyX 評(píng)論0 收藏0
  • Spring/Hibernate 應(yīng)用性能優(yōu)化的7種方法

    摘要:對(duì)于大多數(shù)典型的企業(yè)應(yīng)用而言,其性能表現(xiàn)幾乎完全依賴(lài)于持久層的性能。速成法使用批處理對(duì)于批處理程序,驅(qū)動(dòng)程序提供了旨在減少網(wǎng)絡(luò)來(lái)回傳輸?shù)膬?yōu)化方法。速成法檢查錯(cuò)誤的提交間隔如果你使用批處理程序,提交間隔會(huì)對(duì)性能造成十倍甚至百倍的影響。 對(duì)于大多數(shù)典型的 Spring/Hibernate 企業(yè)應(yīng)用而言,其性能表現(xiàn)幾乎完全依賴(lài)于持久層的性能。此篇文章中將介紹如何確認(rèn)應(yīng)用是否受數(shù)據(jù)庫(kù)約束,同時(shí)...

    lavor 評(píng)論0 收藏0
  • 常識(shí)之外的規(guī)范——阿里java開(kāi)發(fā)手冊(cè)筆記(全章節(jié))

    摘要:說(shuō)明這篇文章是我第一次認(rèn)真閱讀阿里巴巴開(kāi)發(fā)手冊(cè)終極版的筆記。說(shuō)明本手冊(cè)明確防止是調(diào)用者的責(zé)任。一年半載后,那么單元測(cè)試幾乎處于廢棄狀態(tài)。好的單元測(cè)試能夠最大限度地規(guī)避線(xiàn)上故障。 說(shuō)明 這篇文章是我第一次(認(rèn)真)閱讀《阿里巴巴 Java 開(kāi)發(fā)手冊(cè)(終極版)》的筆記。手冊(cè)本身對(duì)規(guī)范的講解已經(jīng)非常詳細(xì)了,如果你已經(jīng)有一定的開(kāi)發(fā)經(jīng)驗(yàn)并且有良好的編碼習(xí)慣和意識(shí),會(huì)發(fā)現(xiàn)大部分規(guī)范是符合常識(shí)的。所以...

    Martin91 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<