Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在hibernate中包含log4j属性文件,以显示带有值而不是问号的查询_Java_Hibernate_Log4j - Fatal编程技术网

Java 在hibernate中包含log4j属性文件,以显示带有值而不是问号的查询

Java 在hibernate中包含log4j属性文件,以显示带有值而不是问号的查询,java,hibernate,log4j,Java,Hibernate,Log4j,我有creartelog4j.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

我有creartelog4j.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是如何工作的。我创建它是为了用
值来显示我的hibernate查询,而不是
,但是它仍然显示
没有任何变化,所以我需要进一步进行什么


我从这里引用了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跟踪还使用“?”打印查询,但它也打印参数绑定,即数据库驱动程序或服务器将用什么替换“?”。

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

该链接已经指出,您应该在单独的日志语句中查找不在sql文本中的绑定sql参数值,如下所示:
将[BasicBinder]绑定参数[1]跟踪为[VARCHAR]-john doe


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

无需添加hibernate.cfg.xml,只需将其放在classpath中并按照本链接中提到的步骤操作即可。 请参阅此链接:-

也添加此链接

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

您的问题将得到解决。

您无法在线打印值。Hibernate将始终打印?当记录查询时。调试级别的org.hibernate.type日志记录的输出显示了用于替换这些问号的值和类型。

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


请根据您的版本参考hibernate参考。这是3.3

编辑:-

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


  • 在我的例子中,不是hibernate.cfg.xml,而是log4j.xml文件,我把@jdev给出的代码放在那里

    true 显示SQL查询

    true 格式化控制台上显示的查询

    true 注释将添加到查询中

    如果您的项目正在向控制台打印1000个查询,请将其他查询设为false: true false false

    或者在我在项目中完成的log4j.xml中写入一个追加器,只需在此处指定的单独文本文件中写入所有SQL查询:

    您不需要包含它。将log4j.properties文件放在类路径中,hibernate将自动拾取该文件。请确保,您提供了所需的jar文件。我已将其放置在默认的
    src
    文件夹中,它位于
    classpath
    中,但我没有看到任何效果。您能确保在classpath中有log4j.properties吗?对我来说,它是有效的。下面是我的项目结构src/main/java-->java类src/main/resources-->log4j.properties。虽然这是maven项目结构。我正在使用普通的eclipse构建(项目-->构建项目)来构建我的类您有什么版本的hibernate?Hibernate 3.5使用SLF4j api,默认情况下使用logback而不是log4j。如果类路径中有logback,请删除它并添加slf4j-log4j12.jar和log4j.jar。
    use\u sql\u comments
    只显示sql注释,它不能解决我的问题。对于非xml属性:log4j.logger.org.hibernate.SQL=DEBUG log4j.logger.org.hibernate.TYPE=DEBUG log4j.logger.org.hibernate.USE_SQL_COMMENTS=DEBUG您的答案似乎是正确的,之前在我的项目中配置了logback,这就是为什么它没有得到log4j,我无法删除它,所以我需要在logback中找到解决方案,感谢您理解我的问题所在。谢谢..@commit,如果您想使用logback,只需将log4j-over-slf4j.jar放在类路径中,根本不用担心log4j的配置。Hibernate 4使用JBoss日志而不是slf4j。看,你能扩大你的答案吗?链接往往会随着时间的推移变得陈旧。
    org.hibernate.SQL   Log all SQL DML statements as they are executed
    
    org.hibernate.type  Log all JDBC parameters