2.4.3 日志

来源:互联网 发布:行矩阵 w t 编辑:程序博客网 时间:2024/05/16 14:27

Hibernate(以及其他许多ORM的实现)同步的执行SQL statements. 当Session.save()被调用的时候,insert statement并不总会被执行;当Item.addBid()调用的时候,update statement也并不是立即会被执行。取而代之的是,SQL通常会在事务的结尾处执行。这种行为被称作write-behind,我们之前提到过这部分内容。

事实证明有时候跟踪和调试ORM代码是很琐碎的一件事情。理论上,对于应用程序来说,可以把Hibernate当作是一个黑盒来对待。当然Hibernate程序也不会检测到这种同步。然而,有时候当你遇到一个困难的问题时,你还是需要能够看到在Hibernate中到底发生了什么。因为Hibernate是开源的,你可以很容易看到Hibernate的源代码。有时候,这么做会给你很大的帮助。尤其是当你面对那些同步的行为的时候,调试Hibernate能够让你迅速找到问题所在,你可以使用日志的方式来获得Hibernate内部的一个视图。

我们已经提过hibernate.show_sql这个参数,它是进行错误跟踪的第一个入口。有些时候,仅仅是SQL还不能够完全满足需求。所以,你可能需要进行的更深入一些。

Hibernate使用Apache commons-logging来记录所有发生的事情,有一个抽象层来确定使用Apache log4j还是JDK1.4 logging。在这里,我们推荐使用log4j,因为它更成熟。

为了能够使用log4j,你需要把一个名叫log4j.properties的文件放到你的classpath上面。下面的这个例子就可以把日志信息输出到控制台上:

image 

使用这个配置,我们不会看到过多的日志信息。如果把log4j.net.sf.hibernate换成是debug的话,我们就能看到Hibernate内部的工作了。在你程序被实际发布之后,你不要这么做,因为过多的日志常常会降低你访问数据库的性能。

最后,你有了hibernate.properties,hibernate.cfg.xml和log4j.properties文件。

还有一种方式来配置Hibernate,如果你的服务器支持Java Management Extensions的话。