16

我有如下的创建log4j.properties文件:

log4j.logger.org.hibernate=INFO, hb
log4j.logger.org.hibernate.SQL=DEBUG
log4j.logger.org.hibernate.type=TRACE
log4j.logger.org.hibernate.hql.ast.AST=info
log4j.logger.org.hibernate.tool.hbm2ddl=warn
log4j.logger.org.hibernate.hql=debug
log4j.logger.org.hibernate.cache=info
log4j.logger.org.hibernate.jdbc=debug

log4j.appender.hb=org.apache.log4j.ConsoleAppender
log4j.appender.hb.layout=org.apache.log4j.PatternLayout
log4j.appender.hb.layout.ConversionPattern=HibernateLog --> %d{HH:mm:ss} %-5p %c - %m%n
log4j.appender.hb.Threshold=TRACE

有人可以帮助我如何将其包含在hibernate.cfg.xml文件中吗?对不起,我实际上不知道 log4j 是如何工作的。我创建了这个来显示我的休眠查询,value而不是,?但它仍然显示?没有任何变化,所以我需要进一步进行什么?

我从这里参考了Hibernate show real SQL

4

8 回答 8

13

hibernate.cfg.xml 中的“show_sql”属性导致查询直接打印到控制台。

Log4j 允许在从控制台到文件到网络端口到数据库的任何位置记录输出。但是您拥有的简单配置也应该在控制台上打印。所以首先删除 show_sql 属性,看看 Log4j 是否在控制台上放了任何东西。

如果这不起作用,则表明 Log4j 配置不正确。如果您使用的是 hibernate > 3.5,它使用 slf4j api,它默认使用 logback 而不是 log4j。您可以通过从类路径中删除 logback jar 并添加 slf4j-log4j12.jar 和 log4j.jar 来轻松切换到 log4j。

Log4j 跟踪还使用“?”打印查询,但它也打印参数绑定,即“?”是什么?将由数据库驱动程序或服务器替换。

于 2013-10-01T11:41:09.937 回答
3

请根据您的版本参考休眠参考。这是3.3链接

编辑 :-

  1. 为了设置日志记录,您需要类路径中的 slf4j-api.jar 以及首选绑定的 jar 文件 - 在 Log4J 的情况下为 slf4j-log4j12.jar。
  2. 将 log4j.properties 文件放在您的类路径中。一个示例属性文件随 Hibernate 在 src/ 目录中分发。
  3. 启用以下日志 4j 类别。

    org.hibernate.SQL   Log all SQL DML statements as they are executed
    
    org.hibernate.type  Log all JDBC parameters
    
于 2013-10-07T07:24:32.460 回答
2

log4j.properties在大多数情况下,包含在应用程序的类路径中就足够了。

请参阅如何正确初始化 log4j?.

有问题的链接已经建议您应该在单独的日志语句中查找不在 sql 文本中的绑定 sql 参数值,如下所示 TRACE [BasicBinder] binding parameter [1] as [VARCHAR] - john doe

但我建议坚持使用log4jdbc。使用起来非常简单。它能够在打印的 sql 文本中内联查询参数值。

于 2013-10-01T13:32:32.690 回答
2

也添加这个

<property name="show_sql">true</property>
<property name="format_sql">true</property>
<property name="use_sql_comments">true</property>

您的问题将得到解决。

于 2013-10-04T21:56:51.683 回答
0

无需添加 hibernate.cfg.xml,只需将其放置到类路径并按照此链接中提到的步骤操作即可。参考这个链接:- http://makecodeeasy.blogspot.in/2013/03/logger-in-spring-web-application.html

于 2013-10-04T08:04:26.423 回答
0

您不能内联打印值。Hibernate 将始终打印 ? 记录查询时。DEBUG 级别的 org.hibernate.type 日志记录的输出显示了用于替换这些问号的值和类型。

于 2013-10-06T20:01:41.330 回答
0

我更喜欢使用 jdbcdslog 代理的 sql 日志记录,而不是休眠日志记录。

记录与数据库通信的 SQL

于 2013-10-07T06:32:18.247 回答
0

在我的情况下,它不是 hibernate.cfg.xml,而是log4j.xml文件,我将@jdev 给出的代码放在其中

<property name="show_sql"> true 显示 SQL 查询

<property name="format_sql"> true 格式化控制台上显示的查询

<property name="use_sql_comments"> true 评论将被添加到查询中

如果您的项目有 1000 条查询打印到控制台,请将其他查询设为 false:<property name="show_sql"> true <property name="format_sql"> false <property name="use_sql_comments"> false

或者将附加程序写入在项目中完成的 log4j.xml,只是将所有 SQL 查询写入此处指定的单独文本文件: Configuring Hibernate logging using Log4j XML config file?

于 2016-04-13T04:58:38.413 回答