2012-01-02 51 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