首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在JBoss EAP 6.3中记录hibernate 4的SQL语句

如何在JBoss EAP 6.3中记录hibernate 4的SQL语句
EN

Stack Overflow用户
提问于 2015-03-15 12:00:00
回答 1查看 3.2K关注 0票数 0

我目前正在开发一个小型的EAP应用程序,我部署在JBoss EAP 6.3.0.GA上(7.4.0.Final-redhat-19版)。

这个应用程序使用hibernate作为它的JPA提供者(hibernate版本4.2.14.SP1-redhat-1),它还在webapp和数据层之间使用一个EJB。

我成功地将我的应用程序配置为在特定文件中通过log4j记录其进程。

我还成功地配置了hibernate,将语句的参数记录到同一个文件中。

使用的THe log4j版本为1.2.16。

我的问题是,当我通过webapp调用DAO时,hibernate生成的SQL语句永远不会登录到文件中,如果通过main方法远程调用业务EJB,这些语句将被记录到server.log文件中。

我需要这些日志,因为间谍在数据源上提供的日志不适合我的情况(我必须在应用程序基础上记录hibernate内容,而不是整个服务器)。

你能告诉我我在我的申请中错配置了什么吗?下面是指向当前存储我的应用程序的github的链接:https://github.com/lionelh/jboss-testing

谢谢你的帮助。

下面也是与我的应用程序一起部署的log4j.properties:

代码语言:javascript
复制
#
# ROOT LOGGER
#
log4j.rootLogger=DEBUG

log4j.appender.applog=org.apache.log4j.DailyRollingFileAppender
log4j.appender.applog.File=../standalone/log/jbosstesting.log
log4j.appender.applog.DatePattern='-'yyyy-MM-dd
log4j.appender.applog.layout=org.apache.log4j.PatternLayout
log4j.appender.applog.layout.ConversionPattern=%5p *** %d{dd/MM/yyyy HH:mm:ss,SSS} *** (%C:%L) *** %m%n

#
# LOGGERS
#
log4j.logger.be.lionelh.jbosstesting=DEBUG, applog
log4j.logger.org.hibernate.SQL=DEBUG, applog
log4j.logger.org.hibernate.type.descriptor.sql.BasicBinder=trace, applog
log4j.logger.org.hibernate.type.descriptor.sql.BasicEXtractor=trace, applog

下面是在JUnit测试期间生成的日志文件的内容(这是部署webapp时我想要的):

代码语言:javascript
复制
DEBUG *** 14/03/2015 16:30:36,996 *** [main] (UserDaoImpl.java:41) *** In findById
DEBUG *** 14/03/2015 16:30:36,999 *** [main] (SqlStatementLogger.java:104)    *** select user0_.US_ID as US_ID1_0_0_, user0_.US_CREATION_DATE as US_CREAT2_0_0_, user0_.US_LANGUAGE as US_LANGU3_0_0_, user0_.US_LAST_UPDATE_DATE as US_LAST_4_0_0_, user0_.US_LOGIN as US_LOGIN5_0_0_ from phone_user user0_ where user0_.US_ID=?
TRACE *** 14/03/2015 16:30:37,003 *** [main] (BasicBinder.java:84) *** binding parameter [1] as [BIGINT] - 1
TRACE *** 14/03/2015 16:30:37,005 *** [main] (BasicExtractor.java:74) *** Found [2015-02-14 21:22:55.0] as column [US_CREAT2_0_0_]
TRACE *** 14/03/2015 16:30:37,005 *** [main] (BasicExtractor.java:74) *** Found [F] as column [US_LANGU3_0_0_]
TRACE *** 14/03/2015 16:30:37,006 *** [main] (BasicExtractor.java:74) *** Found [2015-02-14 21:22:55.0] as column [US_LAST_4_0_0_]
TRACE *** 14/03/2015 16:30:37,006 *** [main] (BasicExtractor.java:74) *** Found [lh] as column [US_LOGIN5_0_0_]

以下是将应用程序部署到JBoss时日志的内容(缺少staement ):

代码语言:javascript
复制
DEBUG *** 14/03/2015 19:54:30,827 *** (be.lionelh.jbosstesting.web.UserBean:69) *** In login()
DEBUG *** 14/03/2015 19:54:30,923 *** (be.lionelh.jbosstesting.data.ejb.JBossTestingBean:35) *** In createUser(UserDto)
DEBUG *** 14/03/2015 19:54:30,924 *** (be.lionelh.jbosstesting.data.domain.dao.impl.UserDaoImpl:28) *** In create(User)
TRACE *** 14/03/2015 19:54:31,146 *** (org.hibernate.type.descriptor.sql.BasicBinder:84) *** binding parameter [1] as [TIMESTAMP] - Sat Mar 14 19:54:31 CET 2015
TRACE *** 14/03/2015 19:54:31,161 *** (org.hibernate.type.descriptor.sql.BasicBinder:84) *** binding parameter [2] as [VARCHAR] - F
TRACE *** 14/03/2015 19:54:31,164 *** (org.hibernate.type.descriptor.sql.BasicBinder:84) *** binding parameter [3] as [TIMESTAMP] - Sat Mar 14 19:54:31 CET 2015
TRACE *** 14/03/2015 19:54:31,165 *** (org.hibernate.type.descriptor.sql.BasicBinder:84) *** binding parameter [4] as [VARCHAR] - vp
DEBUG *** 14/03/2015 19:54:31,286 *** (be.lionelh.jbosstesting.data.ejb.JBossTestingBean:42) *** In findAllUsers()
DEBUG *** 14/03/2015 19:54:31,287 *** (be.lionelh.jbosstesting.data.domain.dao.impl.UserDaoImpl:35) *** In findAll()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-16 16:23:30

问题是Hibernate将使用来自服务器的日志配置,而不是您的应用程序。但是,考虑到您的示例配置,可以很容易地将日志子系统配置为这样做。

您可以将以下CLI命令放入文件中,并通过$JBOSS_HOME/bin/jboss-cli.sh -c --file="path/to/file.cli"运行它们

代码语言:javascript
复制
batch

/subsystem=logging/pattern-formatter=applog-formatter:add(pattern="%5p *** %d{dd/MM/yyyy HH:mm:ss,SSS} *** (%C:%L) *** %m%n")
/subsystem=logging/periodic-rotating-file-handler=applog:add(append=true,autoflush=true,named-formatter=applog-formatter,suffix="'-'yyyy-MM-dd",file={relative-to="jboss.server.log.dir",path="jbosstesting.log"})
/subsystem=logging/logger=be.lionelh.jbosstesting:add(level=DEBUG,handlers=[applog])
/subsystem=logging/logger=org.hibernate.SQL:add(level=DEBUG,handlers=[applog],use-parent-handlers=false)
/subsystem=logging/logger=org.hibernate.type.descriptor.sql.BasicBinder:add(level=TRACE,handlers=[applog],use-parent-handlers=false)
/subsystem=logging/logger=org.hibernate.type.descriptor.sql.BasicEXtractor:add(level=TRACE,handlers=[applog],use-parent-handlers=false)

run-batch

您还需要删除log4j.properties,这样服务器就不会尝试根据这些设置配置日志管理器。

您也可以将脚本与jboss maven-plugin一起使用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29060345

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档