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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/363332.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

快递API接口

快递100 转载于:https://www.cnblogs.com/onesmail/p/10608600.html

js中split()和join()的用法

Split()方法&#xff1a;把一个字符串分割成字符串数组 如上所示&#xff1a;把字符串a按空格分隔&#xff0c;得3个字符串数组。 在如&#xff1a; var a”hao are you” a.split(“”); 得到[h,a,o,a,r,e,y,o,u]; Join方法: 把数组中的所有元素转换为一个字符串 如上图所…

IT行业经典面试题,121套面试题

IT行业经典面试题&#xff0c;121套面试题 资源大小&#xff1a; 580.80KB资源类型&#xff1a;发布人&#xff1a; eyelife 发布日期&#xff1a; 2天前Tag&#xff1a; 名企,计算机 资源分&#xff1a; 10下载人数&#xff1a; 857 4.33/347人评分 12 3 4 5 评论 分享…

词云第一次实践,参考学校老师讲的一些知识点还有网上大佬的代码实现

from wordcloud import WordCloudimport cv2import jiebawith open(1906月考.txt, r, encodingutf-8) as f: # 以读的方式打开词云参考的文档 text f.read() # 阅读cut_text .join(jieba.cut(text)) # 通过jieba库的cut精确模式进行分词# 得到词云形状color_mask cv2…

Spring Integration 4.0:完整的无XML示例

1.简介 Spring Integration 4.0终于发布了 &#xff0c;并且此版本具有非常好的功能。 本文介绍的一种可能性是完全不使用XML即可配置集成流程。 那些不喜欢XML的人仅使用JavaConfig就可以开发集成应用程序。 本文分为以下几节&#xff1a; 介绍。 流程概述。 弹簧配置。 …

http协议组成(请求状态码)

http请求由&#xff1a;请求行&#xff1b;消息报头&#xff1b;请求正文组成 //请求行 Request URL: http://172.32.4.33:8080/operation/v2/autoServer/queryAutoServer.htm //请求地址 Request Method: POST …

CSS伪类的三种写法

今天逛蓝色时&#xff0c;无意发现了有人讨论伪类的正确写法&#xff0c;让我对伪类的认识也更清晰了&#xff0c;转贴于此&#xff0c;以备日后查询(原贴当时没记下地址&#xff0c;已经记不得了) Code<style>a.tb{text-decoration:none;}a.tb:link{color:#FF9900;}a.tb…

sql自动生成golang结构体struct实体类

废话不多说直接上地址 使用地址http://www.linkinstars.com:8090/auto-code 项目github https://github.com/LinkinStars/Auto-Coding 是上次内容的一个更新&#xff0c;方便自己用&#xff0c;希望你也喜欢https://www.cnblogs.com/linkstar/p/10037629.html &#xff08;半个…

如何通过示例在Java中使用CopyOnWriteArraySet

CopyOnWriteArraySet是CopyOnWriteArrayList类的弟弟。 这些是专用集合类&#xff0c;这些类是在JDK 1.5上添加的&#xff0c;以及它们最流行的表亲ConcurrentHashMap 。 它们是并发收集框架的一部分&#xff0c;位于java.util.concurrent包中。 CopyOnWriteArraySet最适合作为…

生成器

一、什么是生成器 通过列表生成式&#xff0c;我们可以直接创建一个列表。但是&#xff0c;受到内存限制&#xff0c;列表容量是有限的。而且&#xff0c;创建一个包含100万个元素的列表&#xff0c;不仅占用很大的存储空间&#xff0c;如果我们仅仅需要访问前面几个元素&#…

VS2008快捷键大全

CtrlmCrtro折叠所有大纲CtrlMCrtrP: 停止大纲显示CtrlKCrtrC: 注释选定内容CtrlKCrtrU: 取消选定注释内容CtrlJ : 列出成员 智能感知ShiftAltEnter: 切换全屏编辑CtrlB,T / CtrlK,K: 切换书签开关CtrlB,N / CtrlK,N: 移动到下一书签 CtrlB,P: 移动到上一书签 CtrlB,C: 清除全部…

jQuery 入口函数主要有4种写法

jqery 入口函数主要有4种写法&#xff0c;其中以第3种方法最为方便。 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"…

面向对象的三大特征 封装继承多态

面向对象设计 和开发程序的好处 交流更加流畅 、提高设计和开发效率 封装将类的某些信息隐藏在类内部&#xff0c;不允许外部程序直接访问&#xff0c;而是通过该类提供的方法来实现对隐藏信息的操作和访问私有化属性 提供公有化的访问方法 保证数据的安全性封装的步骤 …

Spring / Hibernate应用程序的性能调优

对于大多数典型的Spring / Hibernate企业应用程序&#xff0c;应用程序性能几乎完全取决于其持久层的性能。 这篇文章将讨论如何确认我们是否存在“数据库绑定”应用程序&#xff0c;然后逐步讲解7个经常使用的“快速取胜”技巧&#xff0c;这些技巧可以帮助提高应用程序性能。…

我的学习开发环境,呵呵!

今天到电子市场去&#xff0c;花了近700块&#xff0c;弄了块ARM的学习单板&#xff0c;再也不用去搞什么虚拟机了&#xff01; 简单的看了一下开发手册&#xff0c;还有点麻烦&#xff0c;可能得花点时间去把它搞清楚&#xff01; 但这块单板的功能还是很强的&#xff0c;基本…

Java on Windows Mobile

Moved to http://blog.tangcs.com/2008/05/29/java-on-windows-mobile/转载于:https://www.cnblogs.com/WarrenTang/archive/2008/05/29/1209726.html

Jsの练习-数组常用方法

1. join() 方法&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><meta http-equiv"X-UA-Comp…

新手学习笔记Spring AOP全自动编程

业务类 package oyb.service;public interface IUserService {public void add();public void delete(); } package oyb.service;public class UserServiceImpl implements IUserService {Overridepublic void add() {System.out.println("添加用户。。。。");}Overr…

Gradle入门:我们的第一个Java项目

这篇博客文章描述了如何使用Gradle编译和打包一个简单的Java项目。 我们的Java项目只有一个要求&#xff1a; 我们的构建脚本必须创建一个可执行的jar文件。 换句话说&#xff0c;我们必须能够使用以下命令运行程序&#xff1a; java -jar jarfile.jar让我们找出如何满足这一…

特征码弊端渐显 杀毒技术面临革命

一种观点认为&#xff0c;防病毒与安全供应商们在与网络罪犯们的战斗中正逐步失去主动。黑客们的网络爬虫正越来越多的偷偷潜入计算机&#xff0c;植入恶意程序&#xff0c;打开计算机发送远程攻击指令&#xff0c;并把它们变为僵尸网络的僵尸军团。 造成这个局面的根本原因在于…