我试图创建一个hibernate语句的日志.我使用JPA执行我的sql语句,其中Hibernate 2.0是持久化提供者(我的应用服务器是JBoss AS 6.0).我使用EJB 3.0提供的EntityManager接口调用我的CRUD方法。 我读了很多关于启用hinernate日志的帖子,但实际上我看不到任何日志:-(我创建了一个log4j.properties文件,并把它放在Netbeans项目的根目录下,我还把log4j库放在项目的classpath中。我的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
在 <persistence-unit><properties>
标签。
总之hibernate日志不会包含(有用的形式)实际准备好的语句参数的信息。
有一个替代的方法来使用 log4jdbc 任何类型的sql日志。
上面的回答是假设你在JBoss上运行使用hibernate的代码,而不是在IDE中运行。在这种情况下,你应该在服务器/default/deploy/jboss-logging.xml中配置JBoss上的日志记录,而不是在本地IDE classpath中。
注意,JBoss 6默认不使用log4j。所以在ear中添加log4j.properties是没有用的,只要试着添加到jboss-logging.xml中就可以了。
<logger category="org.hibernate">
<level name="DEBUG"/>
</logger>
然后修改根记录器的阈值 请看 SLF4J logger.debug()在JBoss 6中没有被记录。.
如果你能在IDE中直接调试hibernate查询(无需部署),那么你应该在classpath上有log4j.properties、log4j、slf4j-api和slf4j-log4j12这几个jar。http:/www.mkyong.comhibernatehow-to-configure-log4j-in-hibernate-project.
我自己回答。按照Vadzim的建议,我必须考虑jboss-logging.xml文件,并插入这些行。
<logger category="org.hibernate">
<level name="TRACE"/>
</logger>
现在不要只看控制台,而要打开server.log文件(调试信息不会被发送到控制台,但你可以配置这个模式!)。
你的log4j.properties文件应该在capitolo2.ear的根目录下(不是在META-INF),也就是这里。
MyProject
¦ build.xml
¦
+---build
¦ ¦ capitolo2-ejb.jar
¦ ¦ capitolo2-war.war
¦ ¦ JBoss4.dpf
¦ ¦ log4j.properties
我们有一个Tomcat-8.5 + restlet-2.3.4 + hibernate-4.2.0 + log4j-1.2.14 java 8的应用程序在docker中的AlpineLinux上运行。
在usrlocaltomcatwebappsROOTWEB-INFclasseslog4j.properties中加入这2行后,我开始在日志中看到HQL查询。
### log just the SQL
log4j.logger.org.hibernate.SQL=debug
### log JDBC bind parameters ###
log4j.logger.org.hibernate.type=debug
然而,JDBC绑定参数却没有被记录下来。
Spring Boot。v2.3.0.RELEASE
推荐(在application.properties中)。
logging.level.org.hibernate.SQL=DEBUG //logs all SQL DML statements
logging.level.org.hibernate.type=TRACE //logs all JDBC parameters
参数
注意事项 上面的内容虽然不会给你一个漂亮的图案。你可以把它作为一个配置来添加。
properties.put("hibernate.format_sql", "true");
或按以下方式添加。
工作,但不推荐
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
原因:还是让日志框架帮你管理优化输出吧+它不给你准备语句参数。
干杯