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

歡迎訪問 生活随笔!

生活随笔

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

javascript

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

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

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

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

Hibernate查詢日志記錄功能

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

因此,Hibernate只能記錄準備好的語句及其綁定參數的值,而不能記錄實際的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

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

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

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

設置log4jdbc

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

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

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

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

找到數據源定義后,將其重命名為以下名稱:

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

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

<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 >

使用此配置,查詢日志記錄應該已經可以工作了。 可以自定義幾個可用的log4jdbc記錄器的記錄級別。

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

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

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

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

<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>

結論

使用log4jdbc只是進行一些初始設置,但是一旦安裝到位,便非常方便。 擁有真實的查詢日志對于性能故障排除也很有用,這將在以后的文章中進行介紹。

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

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

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

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