启用Hibernate日志记录 [英] Enable Hibernate logging

查看:100
本文介绍了启用Hibernate日志记录的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图创建一个hibernate语句的日志。
我使用JPA执行我的sql语句,其中Hibernate 2.0是持久性提供者(我的应用程序服务器是JBoss AS 6.0)。
我使用EJB 3.0提供的EntityManager接口调用我的CRUD方法。
我阅读了许多关于启用hinernate日志的帖子,但实际上我看不到任何日志:-(
我创建了一个log4j.properties文件,并将其放入Netbeans项目的根文件夹中。 $ b我也把log4j库放到项目的classpath中
我的log4j.properties如下:

pre $ $ $ $ $ ###直接将日志消息发送到标准输出###
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.rootLogger = debug,stdout

log4j.logger.org.hibernate = info

###只记录SQL
log4j.logger.org.hibernate.SQL = debug

### log JDBC绑定参数###
log4j.logger.org.hibernate.type = info

### log schema export / update ###
log4j.logger.org.hibernate.tool.hbm2ddl = info

### log HQL分析树
#log4j.logger.org.hibernate.hql = debug

### log cache activity ###
log4j.logger.org.hibernate.cache = info

### log事务活动
#log4j.logger.org.hibernate.transaction = debug

### log JDBC资源获取
#log4j.logger.org .hibernate.jdbc = debug

为什么我看不到日志信息?
我希望看到SQL中where子句或插入语句中的值(实际上我只看到一些'?')
在此先感谢。



为了清楚起见,我把下面的文件夹结构放在我的项目中:

  MyProject 
| build.xml
| log4j.properties
|
+ --- build
| | capitolo2-ejb.jar
| | capitolo2-war.war
| | JBoss4.dpf
| |
| + --- lib
| | log4j-1.2.15.jar
| | slf4j-api.jar
| | slf4j-jboss-logmanager。 jar
| |
| + --- META-INF
| chapter2-hornetq-jms.xml
| jboss-app.xml
| log4j.properties
| MANIFEST.MF
|
+ --- capitolo2-ejb
| | build.xml
| |
| |
| + --- build
| | + --- classes
| | | | .netbeans_automatic_build
| | | | .netbeans_update_resources
| | |
| | | + --- ejb
| | | + + - com
| | | + + ejb3inction
| | | | + --- actionbazaar
| | | + --- buslogic
| | | | | BillingException.class
| | | | OrderBillingMDB.class
| | | | PlaceBid.class
| | | | | PlaceBandBean.class
| | | | $ | $ | $ | $ | $ | $ | $ | $ | $ PlaceBandBean.class
| | | --persistence
| | | | Bid.class
| | | | BillingInfo.class
| | | | Order.class
| | | | OrderStatus.class
| | | | ShippingInfo.class
| | | |
| | + + --- META-INF
| | | beans.xml
| | | jboss.xml
| | | MANIFEST.MF
| | | persistence.xml
| | |
| | + --- empty
| | + --- generated-sources
| | + --- ap-source -output
| + --- dist
| | capitolo2-ejb.jar
| |
| + --- lib
| | log4j-1.2.15 .jar
| |
| + --- nbproject
| | | ant-deploy.xml
| | | build-impl.xml
| | | genfiles .properties
| | | project.properties
| | | project.xml
| | |
| | + ---私有
| | private.properties
| | private.xml
| |
| + --- setup
| | jboss-ds.xml
| |
| + --- src
| + --- conf
| | beans.xml
| | jboss.xml
| | MANIFEST .MF
| | persistence.xml
| |
| + --- java
| + --- ejb
| + --- com
| + --- ejb3inaction
| + --- actionbazaar
| + --- buslogic
| | BillingException.java
| | OrderBillingMDB.java
| | PlaceBidBean.java
| | PlaceBidBean.java
| | PlaceOrder.java
| | PlaceOrderBean.java
| |
| + - 持久性
| Bid.java
| BillingInfo.java
| Order.java
| OrderStatus.java
|发货pingInfo.java
|
+ --- capitolo2-war
| | build.xml
| |
| + --- build
| | + --- empty
| | + --- --- generated-sources
| | + + - ap-source-output
| | + --- lib
| | | log4j-1.2.15.jar
| | | slf4j-api.jar
| | | slf4j-jboss-logmanager.jar
| | |
| | + - --web
| | | index.jsp
| | |
| | + --- META-INF
| | | MANIFEST.MF
| | |
| + + --- WEB-INF
| | | beans.xml
| | | jboss-web.xml
| | |
| | + - --classes
| | .netbeans_automatic_build
| |。.netbeans_update_resources
| | |
| | + --- it
| | + --- myservlets
| | PlaceBidServ let.class
| | PlaceOrderServlet.class
| |
| + --- dist
| | capitolo2-war.war
| |
| + --- nbproject
| | | ant-deploy.xml
| | | build-impl.xml
| | | genfiles.properties
| | | project.properties
| | | project.xml
| | |
| | + ---私人
| | private.properties
| | private.xml
| |
| + --- setup
| | jboss-ds.xml
| |
| + --- src
| | + --- conf
| | | MANIFEST.MF
| |
| | + --- java
| | + --- it
| | + --- myservlets
| | PlaceBidServlet.java
| | PlaceOrderServlet.java
| |
| + - web
| | index.jsp
| |
| + --- WEB-INF
| beans.xml
| jboss-web.xml
|
+ --- dist
| capitolo2.ear
|
+ --- nbproject
| | ant-deploy .xml
| | build-impl.xml
| | genfiles.properties
| | project.properties
| | project.xml
| |
| + --- private
| private.properties
|
+ --- setup
| jboss-ds.xml
| jboss4-netbeans-destinations-service .xml
| log4j.properties
|
+ - src
+ - conf
chapter2-hornetq-jms.xml
jboss- app.xml
log4j.properties
MANIFEST.MF


解决方案 hibernate日志记录必须在hibernate配置中启用。



添加行

  hibernate.show_sql = true 
hibernate.format_sql = true

要么到

  server \default\deployers\ejb3。 deployer \META-INF\jpa-deployers-jboss-beans.xml 

或应用程序的 persistence.xml < persistence-unit>< properties> 标记中。 b $ b

无论如何,hibernate日志记录不会在实际准备好的语句参数中包含(有用的形式)信息。



有一种使用 log4jdbc 用于任何类型的SQL日志记录。



以上答案假设你运行在JBoss上使用休眠的代码,而不是在IDE中。
在这种情况下,您应该在server \default\deploy\jboss-logging.xml中的JBoss上配置日志记录,而不是在本地IDE类路径中。



请注意,JBoss 6默认不使用log4j。因此,将log4j.properties添加到ear将无济于事。
只需添加到jboss-logging.xml:

 < logger category =org.hibernate> ; 
< level name =DEBUG/>
< / logger>

然后更改根记录器的阈值。请参阅 SLF4J logger.debug()未登录JBoss 6



如果你设法直接从IDE调试hibernate查询(没有部署),那么你应该有log4j.properties,log4j,slf4j-api和classpath上的slf4j-log4j12 jar包。
请参阅 http:// www。 mkyong.com/hibernate/how-to-configure-log4j-in-hibernate-project/


I'm trying to create a log of hibernate statements. I perform my sql statements using JPA where Hibernate 2.0 is the persistence provider (my application server is JBoss AS 6.0). I call my CRUD methods using the EntityManager interface provided by EJB 3.0. I read many posts about enabling hinernate logging but actually i can't see any log :-( I create a log4j.properties file and I put it in the root folder of my Netbeans project. I put also log4j library in the classpath of the project. My log4j.properties s the following:

### 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.rootLogger=debug, stdout

log4j.logger.org.hibernate=info

 ### log just the SQL
log4j.logger.org.hibernate.SQL=debug

### log JDBC bind parameters ###
log4j.logger.org.hibernate.type=info

### log schema export/update ###
log4j.logger.org.hibernate.tool.hbm2ddl=info

### log HQL parse trees
#log4j.logger.org.hibernate.hql=debug

### log cache activity ###
log4j.logger.org.hibernate.cache=info

### log transaction activity
#log4j.logger.org.hibernate.transaction=debug

### log JDBC resource acquisition
#log4j.logger.org.hibernate.jdbc=debug

Why can't I see the log informations? I would like see values in sql where clauses or in insert statements (actually I see only some '?') Thanks in advance.

For clarity I put below the folder structure of my project:

MyProject
¦   build.xml
¦   log4j.properties
¦
+---build
¦   ¦   capitolo2-ejb.jar
¦   ¦   capitolo2-war.war
¦   ¦   JBoss4.dpf
¦   ¦
¦   +---lib
¦   ¦       log4j-1.2.15.jar
¦   ¦       slf4j-api.jar
¦   ¦       slf4j-jboss-logmanager.jar
¦   ¦
¦   +---META-INF
¦           chapter2-hornetq-jms.xml
¦           jboss-app.xml
¦           log4j.properties
¦           MANIFEST.MF
¦
+---capitolo2-ejb
¦   ¦   build.xml
¦   ¦   
¦   ¦
¦   +---build
¦   ¦   +---classes
¦   ¦   ¦   ¦   .netbeans_automatic_build
¦   ¦   ¦   ¦   .netbeans_update_resources
¦   ¦   ¦   ¦
¦   ¦   ¦   +---ejb
¦   ¦   ¦   ¦   +---com
¦   ¦   ¦   ¦       +---ejb3inaction
¦   ¦   ¦   ¦           +---actionbazaar
¦   ¦   ¦   ¦               +---buslogic
¦   ¦   ¦   ¦               ¦       BillingException.class
¦   ¦   ¦   ¦               ¦       OrderBillingMDB.class
¦   ¦   ¦   ¦               ¦       PlaceBid.class
¦   ¦   ¦   ¦               ¦       PlaceBidBean.class
¦   ¦   ¦   ¦               ¦       PlaceOrder.class
¦   ¦   ¦   ¦               ¦       PlaceOrderBean.class
¦   ¦   ¦   ¦               ¦
¦   ¦   ¦   ¦               +---persistence
¦   ¦   ¦   ¦                       Bid.class
¦   ¦   ¦   ¦                       BillingInfo.class
¦   ¦   ¦   ¦                       Order.class
¦   ¦   ¦   ¦                       OrderStatus.class
¦   ¦   ¦   ¦                       ShippingInfo.class
¦   ¦   ¦   ¦
¦   ¦   ¦   +---META-INF
¦   ¦   ¦           beans.xml
¦   ¦   ¦           jboss.xml
¦   ¦   ¦           MANIFEST.MF
¦   ¦   ¦           persistence.xml
¦   ¦   ¦
¦   ¦   +---empty
¦   ¦   +---generated-sources
¦   ¦       +---ap-source-output
¦   +---dist
¦   ¦       capitolo2-ejb.jar
¦   ¦
¦   +---lib
¦   ¦       log4j-1.2.15.jar
¦   ¦
¦   +---nbproject
¦   ¦   ¦   ant-deploy.xml
¦   ¦   ¦   build-impl.xml
¦   ¦   ¦   genfiles.properties
¦   ¦   ¦   project.properties
¦   ¦   ¦   project.xml
¦   ¦   ¦
¦   ¦   +---private
¦   ¦           private.properties
¦   ¦           private.xml
¦   ¦
¦   +---setup
¦   ¦       jboss-ds.xml
¦   ¦
¦   +---src
¦       +---conf
¦       ¦       beans.xml
¦       ¦       jboss.xml
¦       ¦       MANIFEST.MF
¦       ¦       persistence.xml
¦       ¦
¦       +---java
¦           +---ejb
¦               +---com
¦                   +---ejb3inaction
¦                       +---actionbazaar
¦                           +---buslogic
¦                           ¦       BillingException.java
¦                           ¦       OrderBillingMDB.java
¦                           ¦       PlaceBid.java
¦                           ¦       PlaceBidBean.java
¦                           ¦       PlaceOrder.java
¦                           ¦       PlaceOrderBean.java
¦                           ¦
¦                           +---persistence
¦                                   Bid.java
¦                                   BillingInfo.java
¦                                   Order.java
¦                                   OrderStatus.java
¦                                   ShippingInfo.java
¦
+---capitolo2-war
¦   ¦   build.xml
¦   ¦
¦   +---build
¦   ¦   +---empty
¦   ¦   +---generated-sources
¦   ¦   ¦   +---ap-source-output
¦   ¦   +---lib
¦   ¦   ¦       log4j-1.2.15.jar
¦   ¦   ¦       slf4j-api.jar
¦   ¦   ¦       slf4j-jboss-logmanager.jar
¦   ¦   ¦
¦   ¦   +---web
¦   ¦       ¦   index.jsp
¦   ¦       ¦
¦   ¦       +---META-INF
¦   ¦       ¦       MANIFEST.MF
¦   ¦       ¦
¦   ¦       +---WEB-INF
¦   ¦           ¦   beans.xml
¦   ¦           ¦   jboss-web.xml
¦   ¦           ¦
¦   ¦           +---classes
¦   ¦               ¦   .netbeans_automatic_build
¦   ¦               ¦   .netbeans_update_resources
¦   ¦               ¦
¦   ¦               +---it
¦   ¦                   +---myservlets
¦   ¦                           PlaceBidServlet.class
¦   ¦                           PlaceOrderServlet.class
¦   ¦
¦   +---dist
¦   ¦       capitolo2-war.war
¦   ¦
¦   +---nbproject
¦   ¦   ¦   ant-deploy.xml
¦   ¦   ¦   build-impl.xml
¦   ¦   ¦   genfiles.properties
¦   ¦   ¦   project.properties
¦   ¦   ¦   project.xml
¦   ¦   ¦
¦   ¦   +---private
¦   ¦           private.properties
¦   ¦           private.xml
¦   ¦
¦   +---setup
¦   ¦       jboss-ds.xml
¦   ¦
¦   +---src
¦   ¦   +---conf
¦   ¦   ¦       MANIFEST.MF
¦   ¦   ¦
¦   ¦   +---java
¦   ¦       +---it
¦   ¦           +---myservlets
¦   ¦                   PlaceBidServlet.java
¦   ¦                   PlaceOrderServlet.java
¦   ¦
¦   +---web
¦       ¦   index.jsp
¦       ¦
¦       +---WEB-INF
¦               beans.xml
¦               jboss-web.xml
¦
+---dist
¦       capitolo2.ear
¦
+---nbproject
¦   ¦   ant-deploy.xml
¦   ¦   build-impl.xml
¦   ¦   genfiles.properties
¦   ¦   project.properties
¦   ¦   project.xml
¦   ¦
¦   +---private
¦           private.properties
¦
+---setup
¦       jboss-ds.xml
¦       jboss4-netbeans-destinations-service.xml
¦       log4j.properties
¦
+---src
    +---conf
            chapter2-hornetq-jms.xml
            jboss-app.xml
            log4j.properties
            MANIFEST.MF

解决方案

Hibernate logging has to be also enabled in hibernate configuration.

Add lines

hibernate.show_sql=true
hibernate.format_sql=true

either to

server\default\deployers\ejb3.deployer\META-INF\jpa-deployers-jboss-beans.xml

or to application's persistence.xml in <persistence-unit><properties> tag.

Anyway hibernate logging won't include (in useful form) info on actual prepared statements' parameters.

There is an alternative way of using log4jdbc for any kind of sql logging.

The above answer assumes that you run the code that uses hibernate on JBoss, not in IDE. In this case you should configure logging also on JBoss in server\default\deploy\jboss-logging.xml, not in local IDE classpath.

Note that JBoss 6 doesn't use log4j by default. So adding log4j.properties to ear won't help. Just try to add to jboss-logging.xml:

   <logger category="org.hibernate">
     <level name="DEBUG"/>
   </logger>

Then change threshold for root logger. See SLF4J logger.debug() does not get logged in JBoss 6.

If you manage to debug hibernate queries right from IDE (without deployment), then you should have log4j.properties, log4j, slf4j-api and slf4j-log4j12 jars on classpath. See http://www.mkyong.com/hibernate/how-to-configure-log4j-in-hibernate-project/.

这篇关于启用Hibernate日志记录的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆