利用log4j显示hibernate打印sql中的参数
大家都知道在 hibernate.cfg.xml 配置文件中添加以下三条配置,就可以在控制台显示执行的sql:
<!-- 是否显示sql -->
<property name="show_sql">true</property>
<!-- 是否格式化sql -->
<property name="format_sql">true</property>
<!-- 是否使用注释 -->
<property name="use_sql_comments">true</property>
肯定遇到过这种情况:
/* insert cn.javasd.hibernate.ZlpUser
*/ insert
into
ZlpUser
(name, password, createTime, expireTime, id)
values
(?, ?, ?, ?, ?)
?的地方的值并不知道,当然可以跟踪程序断点获得,但是为了方便监控,可以使用log4j的配置来给这些占位符进行参数绑定(bind)
具体配置如下(单在hibernate环境下,未整合spring):
文件名:log4j.properties (根目录下)
### direct log messages to stdout ### log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.out log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n log4j.logger.org.hibernate=debug log4j.logger.org.hibernate.hql.ast.AST=debug #下面的两条配置非常重要,设置为trace后,将可以看到打印出sql中 ? 占位符的实际内容 #this is the most important config for showing parames like ? log4j.logger.org.hibernate.SQL=trace log4j.logger.org.hibernate.type=trace #above two configs log4j.logger.org.hibernate.tool.hbm2ddl=debug log4j.logger.org.hibernate.hql=debug log4j.logger.org.hibernate.cache=debug log4j.logger.org.hibernate.transaction=debug log4j.logger.org.hibernate.jdbc=debug log4j.logger.org.hibernate.connection.DriverManagerConnectionProvider=trace log4j.rootLogger=warn, stdout log4j.logger.org.hibernate.type.descriptor.sql.BasicBinder=TRACE
打印后的结果如下:
Hibernate:
/* insert cn.javasd.hibernate.ZlpUser
*/ insert
into
ZlpUser
(name, password, createTime, expireTime, id)
values
(?, ?, ?, ?, ?)
16:09:06,280 TRACE StringType:151 - binding '张路平2212' to parameter: 1
16:09:06,284 TRACE StringType:151 - binding '3839729' to parameter: 2
16:09:06,287 TRACE TimestampType:151 - binding '2013-01-16 16:09:06' to parameter: 3
16:09:06,294 TRACE TimestampType:151 - binding '2013-01-16 16:09:06' to parameter: 4
16:09:06,295 TRACE StringType:151 - binding '402881e13c426784013c426785cf0001' to parameter: 5
当然,输出的结果中有很多对于自己不必要的信息,可以通过调整log4j的内容来控制输出,那几个debug的信息都可以注掉,其实 log4j.logger.org.hibernate.SQL=trace 这条也可以注掉,不然会打印出两遍sql
最后要说一下配置log4j需要注意的一些地方,特别是引入jar包的时候:
1、因为Hibernate 3用的是slf4j,因此要想使用log4j配置文件来全面配置Hibernate日志,
还需要添加slf4j-log4j12-XX.jar。注意,如果添加了此jar包,需要移除slf4j-nop-XX.jar,
否则控制台会有“Multiple bindings were found on the class path ”错误。
2、需要添加log4j-x.x.xx.jar
3、添加slf4j-api-x.x.x.jar
最后,附件是一个使用了这个配置的小例子
也可以使用 p6spy 来配置,有兴趣的可以试一下,其实就是对jdbc做了代理
相关推荐
hibernate.format_sql 参数用于在 log 和 console 中打印出更漂亮的 SQL。其取值为 true 或 false。当设置为 true 时,Hibernate 将格式化 SQL 语句,提高可读性和调试效率。 4. hibernate.default_schema ...
log4j.logger.org.hibernate.type.descriptor.sql.BasicBinder=TRACE ``` 对于SLF4J,你需要在`logback.xml`或类似的配置文件中设置: ```xml <logger name="org.hibernate.SQL" level="debug"/> ...
SLF4J接口提供了一组通用的日志API,而`slf4j-log4j12`则是这个接口的具体实现,它将SLF4J调用映射到Log4j,这样即使项目中其他部分使用了SLF4J,我们仍然可以利用Log4j的强大功能。 在Hibernate中,日志管理同样...
Spring、Hibernate和Log4j是Java开发中三个非常重要的库,它们各自负责不同的领域,而将它们结合在一起,可以构建出强大的企业级应用系统。 Spring是一个全面的后端应用程序框架,它提供了依赖注入(DI)和面向切面...
在本整合实例中,我们将探讨如何将Spring MVC 5、Hibernate 5、JUnit 4 和 Log4j2 集成在一起,以构建一个高效、可测试和日志记录完善的Java Web应用程序。以下是对这些技术及其整合过程的详细说明: **Spring MVC ...
通过以上步骤,你就可以在Hibernate应用中利用log4j进行详细的日志记录了。这有助于在开发和生产环境中监控和调试你的应用程序,确保其稳定性和可维护性。记得根据实际需求调整log4j的配置,以便在需要时获取合适的...
在Java开发领域,Hibernate、SLF4J、Log4j以及JUnit是四个非常重要的库,它们各自服务于不同的目的,但又常被一起使用以构建高效、可维护的项目。让我们来详细了解一下这些技术和它们在软件开发中的作用。 1. ...
为了显示查询SQL,MyBatis 提供了日志配置,通常可以启用Log4j或SLF4J,并配置相应的日志级别来打印SQL语句。 **iBatis** iBatis 是MyBatis的前身,两者在概念上相似,但MyBatis在iBatis的基础上进行了改进和扩展。...
在"hibernate3-log4j-slf4j"的场景中,我们通常会将SLF4J作为日志接口,然后使用Log4j作为具体的日志实现。SLF4J提供了一个桥接器(slf4j-log4j12.jar),使得Log4j可以被SLF4J调用。这样做的好处是保持代码的独立性...
本篇将详细解析Hibernate3.3.1与SLF4J-Log4j12-1.5.2的集成及其在实际应用中的作用。 **Hibernate3.3.1详解** Hibernate3.3.1是Hibernate系列的一个稳定版本,它提供了丰富的功能,如对象关系映射、事务管理、查询...
本文将深入探讨Log4j的配置文件`log4j.properties`,以及如何在Hibernate框架中集成Log4j。 `log4j.properties`配置文件是Log4j的核心,它定义了日志输出的行为,包括日志级别、输出目的地、格式等。以下是一些关键...
在开发和调试基于Hibernate的Java应用时,有时我们需要获取到SQL语句的完整形式,而不仅仅是Hibernate默认输出的参数化形式。在这种情况下,P6Spy是一个非常有用的工具。P6Spy是一个开源的JDBC代理库,它允许我们...
【hibernate3.2+mysql+log4j】是一个经典的Java开发组合,常用于构建基于JDBC的持久层框架,结合关系型数据库MySQL和日志管理库log4j。这个压缩包可能包含了运行一个使用Hibernate 3.2、MySQL数据库和log4j日志系统...
1. **日志配置**:在Hibernate的配置文件(如hibernate.cfg.xml)中,可以设置`show_sql`属性为`true`,使得Hibernate自动输出执行的SQL语句,此时配合Log4j,可以控制这些SQL的输出级别和格式。 2. **日志拦截器**...
最后,`log4j1.2.16`是Apache的一个经典日志框架,广泛应用于Java应用中。它提供了丰富的日志级别(如DEBUG、INFO、WARN、ERROR和FATAL),以及自定义日志格式和输出目标(如控制台、文件、数据库等)的能力。通过...
日志配置文件(log4j.properties)是用来控制日志输出的,这里设置了日志级别为WARN,并将日志输出到控制台。 实体类(User.java)是数据库表的映射对象,包含字段id、name和birthday。id字段使用了"native"生成...
Struts2、Hibernate、Spring、Log4j、Tomcat 和 MySQL 是Java Web开发中的关键组件,它们共同构建了一个高效、可扩展的Web应用程序框架。以下是对这些技术的详细解释: **Struts2**:Struts2是一个基于MVC(Model-...
这意味着用户可能需要这些库来在他们的Java应用中集成Hibernate和log4j的功能。 **知识点详解** 1. **Hibernate**: Hibernate是一个对象关系映射(ORM)框架,它允许开发人员使用面向对象的编程方式来处理数据库。...