`

利用log4j显示hibernate打印sql中的参数

 
阅读更多

利用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输出sql语句参数配置.doc

    hibernate.format_sql 参数用于在 log 和 console 中打印出更漂亮的 SQL。其取值为 true 或 false。当设置为 true 时,Hibernate 将格式化 SQL 语句,提高可读性和调试效率。 4. hibernate.default_schema ...

    hibernate显示不带?的完整sql

    log4j.logger.org.hibernate.type.descriptor.sql.BasicBinder=TRACE ``` 对于SLF4J,你需要在`logback.xml`或类似的配置文件中设置: ```xml &lt;logger name="org.hibernate.SQL" level="debug"/&gt; ...

    Hibernate中log4j-1.2.16 +slf4j-log4j12-1.5.2

    SLF4J接口提供了一组通用的日志API,而`slf4j-log4j12`则是这个接口的具体实现,它将SLF4J调用映射到Log4j,这样即使项目中其他部分使用了SLF4J,我们仍然可以利用Log4j的强大功能。 在Hibernate中,日志管理同样...

    spring+hibernate+log4j所需要的jar包

    Spring、Hibernate和Log4j是Java开发中三个非常重要的库,它们各自负责不同的领域,而将它们结合在一起,可以构建出强大的企业级应用系统。 Spring是一个全面的后端应用程序框架,它提供了依赖注入(DI)和面向切面...

    springmvc5+hibernate5+junit4+log4j2整合实例

    在本整合实例中,我们将探讨如何将Spring MVC 5、Hibernate 5、JUnit 4 和 Log4j2 集成在一起,以构建一个高效、可测试和日志记录完善的Java Web应用程序。以下是对这些技术及其整合过程的详细说明: **Spring MVC ...

    hibernate整合log4j jar包

    通过以上步骤,你就可以在Hibernate应用中利用log4j进行详细的日志记录了。这有助于在开发和生产环境中监控和调试你的应用程序,确保其稳定性和可维护性。记得根据实际需求调整log4j的配置,以便在需要时获取合适的...

    hibernate+slf4j+log4j+junit包

    在Java开发领域,Hibernate、SLF4J、Log4j以及JUnit是四个非常重要的库,它们各自服务于不同的目的,但又常被一起使用以构建高效、可维护的项目。让我们来详细了解一下这些技术和它们在软件开发中的作用。 1. ...

    mybatis,ibatis,hibernate 显示查询SQL

    为了显示查询SQL,MyBatis 提供了日志配置,通常可以启用Log4j或SLF4J,并配置相应的日志级别来打印SQL语句。 **iBatis** iBatis 是MyBatis的前身,两者在概念上相似,但MyBatis在iBatis的基础上进行了改进和扩展。...

    hibernate3-log4j-slf4j所有包

    在"hibernate3-log4j-slf4j"的场景中,我们通常会将SLF4J作为日志接口,然后使用Log4j作为具体的日志实现。SLF4J提供了一个桥接器(slf4j-log4j12.jar),使得Log4j可以被SLF4J调用。这样做的好处是保持代码的独立性...

    hibernate3.3.1接口实现包 slf4j-log4j12-1.5.2

    本篇将详细解析Hibernate3.3.1与SLF4J-Log4j12-1.5.2的集成及其在实际应用中的作用。 **Hibernate3.3.1详解** Hibernate3.3.1是Hibernate系列的一个稳定版本,它提供了丰富的功能,如对象关系映射、事务管理、查询...

    Log - Log4j - log4j.properties配置文件

    本文将深入探讨Log4j的配置文件`log4j.properties`,以及如何在Hibernate框架中集成Log4j。 `log4j.properties`配置文件是Log4j的核心,它定义了日志输出的行为,包括日志级别、输出目的地、格式等。以下是一些关键...

    采用p6spy完整显示hibernate的SQL语句

    在开发和调试基于Hibernate的Java应用时,有时我们需要获取到SQL语句的完整形式,而不仅仅是Hibernate默认输出的参数化形式。在这种情况下,P6Spy是一个非常有用的工具。P6Spy是一个开源的JDBC代理库,它允许我们...

    hibernate3.2+mysql+log4j

    【hibernate3.2+mysql+log4j】是一个经典的Java开发组合,常用于构建基于JDBC的持久层框架,结合关系型数据库MySQL和日志管理库log4j。这个压缩包可能包含了运行一个使用Hibernate 3.2、MySQL数据库和log4j日志系统...

    log4j-1.2.16

    1. **日志配置**:在Hibernate的配置文件(如hibernate.cfg.xml)中,可以设置`show_sql`属性为`true`,使得Hibernate自动输出执行的SQL语句,此时配合Log4j,可以控制这些SQL的输出级别和格式。 2. **日志拦截器**...

    hibernate3.3.2+commons-lang2.3+slf4j1.5.8+log4j1.2.16.zip

    最后,`log4j1.2.16`是Apache的一个经典日志框架,广泛应用于Java应用中。它提供了丰富的日志级别(如DEBUG、INFO、WARN、ERROR和FATAL),以及自定义日志格式和输出目标(如控制台、文件、数据库等)的能力。通过...

    使用hibernate对sqlserver 2005进行增删改查

    日志配置文件(log4j.properties)是用来控制日志输出的,这里设置了日志级别为WARN,并将日志输出到控制台。 实体类(User.java)是数据库表的映射对象,包含字段id、name和birthday。id字段使用了"native"生成...

    struts2+hibernate+spring+mysql+tomcat+log4j

    Struts2、Hibernate、Spring、Log4j、Tomcat 和 MySQL 是Java Web开发中的关键组件,它们共同构建了一个高效、可扩展的Web应用程序框架。以下是对这些技术的详细解释: **Struts2**:Struts2是一个基于MVC(Model-...

    Hibernate+log4j驱动包

    这意味着用户可能需要这些库来在他们的Java应用中集成Hibernate和log4j的功能。 **知识点详解** 1. **Hibernate**: Hibernate是一个对象关系映射(ORM)框架,它允许开发人员使用面向对象的编程方式来处理数据库。...

Global site tag (gtag.js) - Google Analytics