Как зарегистрировать оператор SQL, сделанный спящим режимом 4, в JBoss EAP 6.3

В настоящее время я разрабатываю небольшое веб-приложение, которое я развертываю на JBoss EAP 6.3.0.GA (версия 7.4.0.Final-redhat-19).

Это приложение использует спящий режим в качестве поставщика JPA (спящий режим версии 4.2.14.SP1-redhat-1), а также использует EJB между веб-приложением и уровнем данных).

Я успешно настроил свое приложение для регистрации своих процессов через log4j в определенном файле.

Я также успешно настроил спящий режим для регистрации параметров оператора в тот же файл.

Используемая версия log4j — 1.2.16.

Моя проблема в том, что операторы SQL, сгенерированные спящим режимом, никогда не регистрируются в файле, когда я вызываю свой DAO через веб-приложение, и эти операторы регистрируются в файле server.log при удаленном вызове бизнес-компонента EJB через основной метод.

Мне нужны эти журналы, потому что журнал, предоставленный шпионом в источнике данных, не подходит для моего случая (я должен регистрировать спящий режим на основе приложения, а не для всего сервера).

Можете ли вы сказать мне, что я неправильно настроил в своем приложении? Вот ссылка на github, где в настоящее время хранится мое приложение: https://github.com/lionelh/jboss-testing

Спасибо за помощь.

Вот также log4j.properties, который развернут с моим приложением:

#
# 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 (это то, что я хочу, когда веб-приложение развернуто):

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 (отсутствует SQL-запрос:

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()

person lionelh    schedule 15.03.2015    source источник


Ответы (1)


Проблема в том, что Hibernate будет использовать конфигурацию журнала с сервера, а не из вашего приложения. Учитывая вашу примерную конфигурацию, было бы довольно легко настроить подсистему ведения журнала для этого.

Вы можете поместить следующие команды CLI в файл и запустить их через $JBOSS_HOME/bin/jboss-cli.sh -c --file="path/to/file.cli"

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. -as-maven-plugin.

person James R. Perkins    schedule 16.03.2015
comment
Я попробовал ваше решение. К сожалению, результат тот же (логируются только параметры, а операторы SQL не регистрируются). Более того, с вашим предложением обновляется standalone.xml, что не является моей целью, как я сказал в своем вопросе. - person lionelh; 17.03.2015
comment
Hibernate всегда переходит в диспетчер журналов серверов. Единственный способ обойти это — каким-то образом поместить Hibernate в ваше развертывание. Я не уверен, что это сработает, поскольку он тесно интегрирован с сервером. FWIW Я попробовал ваш образец приложения с несколькими изменениями, и операторы SQL были зарегистрированы для меня. - person James R. Perkins; 17.03.2015
comment
Итак, какие изменения вы внесли, чтобы оператор SQL регистрировался? - person lionelh; 17.03.2015
comment
Настроил подсистему ведения журналов и удалил файл log4j.properties. Я отредактирую ответ, так как забыл упомянуть эту часть. Также, если вам нужны разные журналы для разных развертываний, посмотрите профили журналов. - person James R. Perkins; 17.03.2015