Ведение журнала OpenJPA с помощью slf4j в WebSphere - PullRequest
5 голосов
/ 02 января 2012

Мое приложение Java EE 6 использует slf4j с logback в качестве основы ведения журнала.Теперь я хочу добавить трассировки SQL OpenJpa в мои файлы журнала.OpenJpa-Documentation говорит, что я могу использовать параметр для этого:

<property name="openjpa.Log" value="slf4j"/>

Я использую WebSphere Application Server v8.0.0.1 в качестве контейнера Java EE.Если я разверну свое приложение на сервере, этот параметр ничего не изменит.Я могу изменить уровни журналов в WebSphere Admin Console, и это отлично работает.Но я не могу обойти протоколирование OpenJpa в моей инфраструктуре slf4j.

Кто-нибудь использует такую ​​конфигурацию и решил проблему?

Кстати.Я знаю, что информационный центр-статья http://publib.boulder.ibm.com/infocenter/wasinfo/v8r0/index.jsp?topic=%2Fcom.ibm.websphere.nd.doc%2Finfo%2Fae%2Fae%2Ftejb_jpatroubleshoot.html говорит, что параметр будет игнорироваться, но все должно быть возможно, а?

Ответы [ 2 ]

0 голосов
/ 18 июня 2012

Я решил это.

Есть четыре вещи, которые нужно сделать:

  1. Скажите, что OpenJpa регистрирует операторы. Это делается записью свойства в файле persistence.xml.
  2. Скажите Slf4j, что он также должен получать журналы из JUL. Это можно сделать, установив SLF4JBridgeHandler с помощью SLF4J. Я установил мост через ServletContextListener, который вызывается при запуске приложения.
  3. Настройте Logback так, чтобы он не регистрировал ВСЕ журналы из JUL, а только необходимые журналы. Это делается путем добавления LevelChangePropagator в logBack-test.xml
  4. Попросите WebSphere TraceService передать журналы из OpenJPA в приложение. Это настройка в консоли администрирования WebSphere
0 голосов
/ 03 января 2012

Я не знаю, какая версия OpenJPA встроена в WAS 8.0.

В OpenJPA 1.x не было возможности использовать «slf4j».Обходным путем было копирование класса org.apache.openjpa.lib.log.SLF4JLogFactory из источников OpenJPA 2.x в ваше приложение и его непосредственное использование:

<property name="openjpa.Log" value="org.apache.openjpa.lib.log.SLF4JLogFactory"/>

Вы можете всегда указывать имя класса фабрики напрямую, сокращенноеимя - это всего лишь удобный прием.

В OpenJPA 2.x присутствует SLF4JLogFactory, поэтому он должен работать с вашими текущими настройками;возможно, вы установили его в месте, которое переопределяется другой конфигурацией?Например, если вы настраиваете JPA с помощью EntityManagerFactory 'propertyMap, он имеет приоритет над настройками в persistence.xml.

...