启用Hibernate日志记录

我正在尝试创建一个hibernate语句的日志。 我使用JPA执行我的sql语句,其中Hibernate 2.0是持久性提供程序(我的应用程序服务器是JBoss AS 6.0)。 我使用EJB 3.0提供的EntityManager接口调用我的CRUD方法。 我读了很多关于启用hinernate日志的post,但实际上我看不到任何日志:-(我创建了一个log4j.properties文件,我将它放在我的Netbeans项目的根文件夹中。我还将log4j库放在了类的路径中我的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.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 

为什么我看不到日志信息? 我想在sql where子句或insert语句中看到值(实际上我只看到一些’?’)提前感谢。

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

 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配置中启用Hibernate日志记录。

添加行

 hibernate.show_sql=true hibernate.format_sql=true 

要么

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

或者标签中的应用程序的persistence.xml

无论如何,hibernate日志记录将不包括(以有用的forms)实际预准备语句参数的信息。

有一种将log4jdbc用于任何类型的sql日志记录的替代方法。

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

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

     

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

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

我回答自己。 正如Vadzim所建议的那样,我必须考虑jboss-logging.xml文件并插入以下行:

    

而不是DEBUG级别我写了TRACE。 现在不要只查看控制台,而是打开server.log文件(调试消息不会发送到控制台,但您可以配置此模式!)。

您的log4j.properties文件应位于capitolo2.ear的根级别(不在META-INF中),即:

 MyProject ¦ build.xml ¦ +---build ¦ ¦ capitolo2-ejb.jar ¦ ¦ capitolo2-war.war ¦ ¦ JBoss4.dpf ¦ ¦ log4j.properties 

我们在docker的AlpineLinux上运行了一个tomcat-8.5 + restlet-2.3.4 + hibernate-4.2.0 + log4j-1.2.14 java 8 app。

将这两行添加到/usr/local/tomcat/webapps/ROOT/WEB-INF/classes/log4j.properties后,我开始在日志中看到HQL查询:

 ### log just the SQL log4j.logger.org.hibernate.SQL=debug ### log JDBC bind parameters ### log4j.logger.org.hibernate.type=debug 

但是,未记录JDBC绑定参数。