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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring / Hibernate使用log4jdbc改进了SQL日志记录

發(fā)布時間:2023/12/3 javascript 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring / Hibernate使用log4jdbc改进了SQL日志记录 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Hibernate提供了開箱即用的SQL日志記錄,但是這種日志記錄僅顯示準備好的語句,而不顯示發(fā)送到數(shù)據(jù)庫的實際SQL查詢。

它還不會記錄每個查詢的執(zhí)行時間,這對于性能故障排除很有用。 這篇博客文章將介紹如何設置Hibernate查詢?nèi)罩居涗?#xff0c;然后將其與可以通過log4jdbc獲得的日志記錄進行比較。

Hibernate查詢?nèi)罩居涗浌δ?/h3>

Hibernate不會記錄發(fā)送到數(shù)據(jù)庫的實際SQL查詢。 這是因為Hibernate通過JDBC驅(qū)動程序與數(shù)據(jù)庫進行交互,它向其發(fā)送準備好的語句,但不發(fā)送實際的查詢。

因此,Hibernate只能記錄準備好的語句及其綁定參數(shù)的值,而不能記錄實際的SQL查詢本身。

這是由Hibernate登錄時查詢的外觀:

select /* load your.package.Employee */ this_.code, ... from employee this_ where this_.employee_id=?TRACE 12-04-2014@16:06:02 BasicBinder - binding parameter [1] as [NUMBER] - 1000

請參閱本文, 為什么Hibernate在哪里以及在哪里進行此SQL查詢? 有關如何設置此類日志記錄的信息。

使用log4jdbc

對于開發(fā)人員而言,能夠從日志中復制粘貼查詢并能夠直接在SQL客戶端中執(zhí)行查詢非常有用,但是變量占位符是? 使其不可行。

開源工具中的Log4jdbc可以做到這一點,甚至更多。 Log4jdbc是一個間諜驅(qū)動程序,它將自身包裹在真正的JDBC驅(qū)動程序中,并記錄查詢過程中的查詢。

與其他幾個log4jdbc分支不同,本文中鏈接的版本提供了Spring集成。

設置log4jdbc

首先在您的pom.xml中包含log4jdbc-remix庫。 該庫是原始log4jdbc的分支:

<dependency><groupId>org.lazyluke</groupId><artifactId>log4jdbc-remix</artifactId<version>0.2.7</version> </dependency>

接下來,在Spring配置中找到數(shù)據(jù)源的定義。 例如,使用JNDI查找元素時,數(shù)據(jù)源的外觀如下:

<jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jdbc/some-db" />

找到數(shù)據(jù)源定義后,將其重命名為以下名稱:

<jee:jndi-lookup id="dataSourceSpied" jndi-name="java:comp/env/jdbc/some-db" />

然后定義一個新的log4jdbc數(shù)據(jù)源,該數(shù)據(jù)源包裝了真實的數(shù)據(jù)源,并為其指定了原始名稱:

<bean id="dataSource" class="net.sf.log4jdbc.Log4jdbcProxyDataSource" > <constructor-arg ref="dataSourceSpied" /> <property name="logFormatter"> <bean class="net.sf.log4jdbc.tools.Log4JdbcCustomFormatter" ><property name="loggingType" value="SINGLE_LINE" /><property name="margin" value="19" /> <property name="sqlPrefix" value="SQL:::" /> </bean> </property> </bean >

使用此配置,查詢?nèi)罩居涗洃撘呀?jīng)可以工作了。 可以自定義幾個可用的log4jdbc記錄器的記錄級別。

log4jdbc原始文檔提供了有關可用記錄器的更多信息:

  • jdbc.sqlonly :僅記錄SQL
  • jdbc.sqltiming :記錄SQL,執(zhí)行后,包括定時執(zhí)行統(tǒng)計信息
  • jdbc.audit :記錄除結(jié)果集外的所有JDBC調(diào)用
  • jdbc.resultset :記錄對ResultSet對象的所有調(diào)用
  • jdbc.connection :記錄連接打開和關閉事件

jdbc.audit記錄器對于記錄事務范圍特別有用,因為它記錄了數(shù)據(jù)庫事務的開始/提交/回滾事件。

這是建議的log4j配置,將僅打印SQL查詢及其執(zhí)行時間:

<logger name="jdbc.sqltiming" additivity ="false"> <level value="info" /> </logger> <logger name="jdbc.resultset" additivity ="false"> <level value="error" /> </logger> <logger name="jdbc.audit" additivity ="false"><level value="error" /> </logger> <logger name="jdbc.sqlonly" additivity ="false"> <level value="error" /> </logger> <logger name="jdbc.resultsettable" additivity ="false"> <level value="error" /> </logger> <logger name="jdbc.connection" additivity ="false"> <level value="error" /> </logger> <logger name="jdbc.resultsettable" additivity ="false"> <level value="error" /> </logger>

結(jié)論

使用log4jdbc只是進行一些初始設置,但是一旦安裝到位,便非常方便。 擁有真實的查詢?nèi)罩緦τ谛阅芄收吓懦埠苡杏?#xff0c;這將在以后的文章中進行介紹。

翻譯自: https://www.javacodegeeks.com/2014/06/springhibernate-improved-sql-logging-with-log4jdbc.html

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的Spring / Hibernate使用log4jdbc改进了SQL日志记录的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。