2016-08-24 5 views
1

Мне интересно записывать SQL-запросы. Я пробовал два подхода: log4j2 и запись в файл, как зря.WebSphere (8.5.5) не регистрирует OpenJPA

Я добавил следующие строки persistence.xml

<property name="openjpa.Log" value="SQL=TRACE" /> 
<property name="openjpa.Log" value="File=openjpa_ra.log" /> 
<property name="openjpa.ConnectionFactoryProperties" value="PrintParameters=true" /> 

и я ожидал, что это запись в файл, но ничего не произошло. С другой стороны, когда я указываю

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

вместо файла строки, ничего не меняется в моих log4j2 файлов, несмотря на то, сконфигурировано Appender.

Update: Я установил следующее persistence.xml:

  <property name="openjpa.Log" value="File=d:\openra_log.log, DefaultLevel=WARN, Runtime=INFO, Tool=INFO, SQL=TRACE"/> 

А теперь файл производится, но линии я вижу, есть только линии

INFO [Worker-370] openjpa.Tool - Enhancer running on type "class type" 

ответ

1

Антон, скорее всего, конфигурация log4j переопределяется в одном из ранее загруженных компонентов сервера приложений.

Ваш лучший выбор, чтобы выяснить, что происходит, это изменить уровни трассировки на стороне сервера специально для открытой JPA с правильными строками уровня трассировки.

Вы можете перемещаться, чтобы изменить протоколирования детали (следить за крошку на изображении) Log Details и использовать строку трассировки для открытых JPA (* = информация: openjpa.Query = все: openjpa.jdbc_JDBC = все: openjpa.jdbc_SQL = все). Изменения в конфигурации потребуют перезагрузки сервера.

+0

Большое спасибо! Я сделал это, как во время выполнения, так и в настройках, но ничего не изменилось. Все еще не удается записать в файл \ журнал. – Anton

+0

Вы видите что-либо в системной ошибке или системной ошибке в журнале сервера, что объясняет конфликт log4j. Вы находите свои журналы JPA в System out? –

+0

Я решил получить как минимум файл. Мне удалось получить некоторый результат, несмотря на то, что это не совсем то, что я хочу. – Anton

2

Во-первых, в сторону: у вас есть это в вашем файле persistence.xml:

<property name="openjpa.Log" value="SQL=TRACE" /> 
<property name="openjpa.Log" value="File=openjpa_ra.log" /> 

Только один из них вступит в силу. То есть, как и любые свойства Java, они не являются кумулятивными, OpenJPA не будет объединять эти два параметра Log, но скорее будет использовать один (вероятно, последний обработанный). Выше должно быть объединено, как это:

<property name="openjpa.Log" value="SQL=TRACE, File=openjpa_ra.log" /> 

Далее, позвольте мне ответить на ваш вопрос под руку: Если вы используете контейнер управляемого бинома (например @PersistenceContext), то параметры трассировки в файле persistence.xml игнорируются , Это связано с тем, что трассировка обрабатывается контейнером/WAS при использовании контейнера. Чтобы объяснить это, пожалуйста, посмотрите на этот документ:

http://www.ibm.com/support/knowledgecenter/en/SSEQTP_8.5.5/com.ibm.websphere.base.doc/ae/tejb_loggingwjpa.html

В частности, это предупреждение:

избежать неприятностей: Свойство openjpa.Log игнорируется, если она определена в единице хранения, управляемой контейнером, которая использует поставщиков персистентности, которые предоставляются сервером приложений. В этом случае вы должны использовать стандартную спецификацию трассировки для сервера приложений.

Если вы заходите в консоль администратора, вы можете установить местоположение вашего вывода трассировки.Но я не верю, что есть способ перейти от использования WAS trace к log4j. Когда jpa-провайдер работает в WAS, компонент jeeruntime принимает функции ведения журнала между интерфейсом WAS Trace и OpenJPA, поэтому оператор «Избегайте проблем» в инфоцентре и ссылку «спецификация трассировки для сервера приложений». В WAS вам нужно будет использовать спецификацию трассировки, например. openjpa=all:JPA=all or openjpa.jdbc.SQL=all, последний даст вам только SQL-трассировку, первую трассировку JPA. В нижней строке вы не сможете перенаправить только трассировку OpenJPA/JPA в один файл, когда используется контейнер.

Если вы не используете контейнер удалось, то это должно печатать SQL тракта в файл openjpa_ra.log:

<property name="openjpa.Log" value="SQL=TRACE, File=openjpa_ra.log" /> 

Я хотел бы попробовать это, и только это ..... Я думаю, что настройки вы Записывать добавленный в ваше «обновление», может быть слишком запутанным. Если вы не используете постоянное управление контейнером, тогда ведение журнала WAS не задействовано, и настройки журнала будут соблюдены. Кроме того, вы должны иметь возможность использовать Log4j. Использование Log4j документирована в OpenJPA документы здесь:

http://openjpa.apache.org/builds/2.2.2/apache-openjpa/docs/manual#ref_guide_logging_log4j

Я надеюсь, что это помогает, пожалуйста, дайте мне знать, если вам нужно больше информации.

Спасибо,

Хит

Смежные вопросы