2012-01-02 74 views
4

我的Java EE 6應用程序使用帶有logback作爲日誌框架的slf4j。 現在我想將OpenJpa的SQL跟蹤添加到我的日誌文件中。 OpenJpa-Documentation說,我可以使用這個參數:在WebSphere上使用slf4j進行OpenJPA日誌記錄

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

我使用WebSphere Application Server v8.0.0.1作爲Java EE容器。如果我將我的應用程序部署到服務器,則此參數不會更改任何內容。我可以在WebSphere管理控制檯中更改日誌級別,這可以正常工作。但是無法繞過OpenJPa日誌記錄到我的slf4j框架。

是否有人使用這樣的配置,並解決了這個問題?

Btw。我知道,信息中心 - 文章http://publib.boulder.ibm.com/infocenter/wasinfo/v8r0/index.jsp?topic=%2Fcom.ibm.websphere.nd.doc%2Finfo%2Fae%2Fae%2Ftejb_jpatroubleshoot.html 說,該參數將被忽略,但一切都應該是可能的,呃?

回答

0

我解決了它。

有四件事情要做:

  1. 都說OpenJPA中記錄的聲明。這是通過persistence.xml中的屬性條目完成的。
  2. 說Slf4j它也必須從JUL獲取日誌。這可以通過SLF4J安裝SLF4JBridgeHandler完成。我通過在應用程序啓動時調用的ServletContextListener安裝橋。
  3. 配置Logback,它不記錄來自JUL的所有日誌,但僅記錄所需的日誌。這是通過在的logback-的test.xml
  4. 問的WebSphere TraceService從OpenJPA的日誌倒手給應用程序添加LevelChangePropagator完成。這是在WebSphere管理控制檯
0

我不知道是什麼版本的OpenJPA的嵌入爲8.0。

在OpenJPA 1.x中有沒有可能使用 「SLF4J」。一種解決方法是從複製的OpenJPA 2.x的源類org.apache.openjpa.lib.log.SLF4JLogFactory您的應用程序,並直接使用它:

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

可以總是直接指定工廠類名,短名稱僅僅是一個方便的把戲。

在OpenJPA 2.X的SLF4JLogFactory存在,所以它應該與當前的設置工作;也許你把它放在一個被其他配置覆蓋的地方?例如,如果通過EntityManagerFactory的propertyMap配置JPA,它將優先於persistence.xml中的設置。

+0

非常感謝您的回覆設置!不幸的是,似乎openjpa.Log參數將被Websphere持久性實現忽略。我使用默認的持久性提供程序(com.ibm.websphere.persistence.PersistenceProviderImpl),因此我可以使用容器提供的數據源。 – 2012-01-04 08:46:07

+0

內置的OpenJPA也可以使用容器提供的數據源 - 如果沒有這個數據源,這將是無用的,難道不是嗎? – MaDa 2012-01-04 09:43:23