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