2016-08-24 102 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。

更新:我已經配置在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

您是否在服務器日誌上的System out或System錯誤中看到任何解釋log4j衝突的內容。你發現你的JPA登錄系統了嗎? –

+0

我已決定至少獲得文件輸出權。我已經成功地獲得了一些輸出,儘管它不完全是我想要的。 – Anton

2

首先,順便說一句:你有這個在你的persistence.xml文件:

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

這些只有一個會生效。也就是說,就像任何Java屬性一樣,它們不是累積的,OpenJPA不會合並這兩個日誌設置,而只會使用一個(可能是最後一個處理過的)。上述應結合這樣的:

<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跟蹤到log4j的方法。當jpa提供程序在WAS中運行時,jeeruntime組件接管WAS的Trace和OpenJPA的Log接口之間的日誌記錄功能,因此infoCenter中的「避免故障」語句和「應用程序服務器的跟蹤規範」參考。在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

我希望這可以幫助,請讓我知道,如果你需要更多的細節。

感謝,

希思

相關問題