【问题标题】:OpenJPA logging with slf4j on WebSphere在 WebSphere 上使用 slf4j 进行 OpenJPA 日志记录
【发布时间】:2012-01-31 22:50:43
【问题描述】:

我的 Java EE 6 应用程序使用带有 logback 的 slf4j 作为日志框架。 现在我想将 OpenJpa 的 SQL 跟踪添加到我的日志文件中。 OpenJpa 文档说,我可以为此使用一个参数:

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

我使用 WebSphere Application Server v8.0.0.1 作为 Java EE 容器。如果我将应用程序部署到服务器,此参数不会更改任何内容。我可以在 WebSphere Admin Console 中更改日志级别,这可以正常工作。但是 a 无法绕过 OpenJpa 日志记录到我的 slf4j 框架。

有没有人使用这样的配置并解决了问题?

顺便说一句。我知道,信息中心文章http://publib.boulder.ibm.com/infocenter/wasinfo/v8r0/index.jsp?topic=%2Fcom.ibm.websphere.nd.doc%2Finfo%2Fae%2Fae%2Ftejb_jpatroubleshoot.html 说,那个参数会被忽略,但是应该一切皆有可能吧?

【问题讨论】:

    标签: websphere slf4j openjpa


    【解决方案1】:

    我解决了。

    有四件事要做:

    1. 假设 OpenJpa 记录语句。这是由 persistence.xml 中的属性条目完成的。
    2. 说 Slf4j 它也必须从 JUL 获取日志。这可以通过安装 SLF4J 的 SLF4JBridgeHandler 来完成。我通过在应用程序启动时调用的 ServletContextListener 安装了网桥。
    3. 配置 Logback,它不记录来自 JUL 的所有日志,而只记录所需的日志。这是通过在 logBack-test.xml 中添加 LevelChangePropagator 来完成的
    4. 请求 WebSphere TraceService 将日志从 OpenJPA 传递到应用程序。这是 WebSphere 管理控制台中的设置

    【讨论】:

      【解决方案2】:

      我不知道 WAS 8.0 中嵌入了哪个版本的 OpenJPA。

      在 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 存在,因此它应该适用于您当前的设置;也许您将它设置在被其他配置覆盖的地方?例如,如果通过EntityManagerFactory的propertyMap配置JPA,则优先于persistence.xml中的设置。

      【讨论】:

      • 非常感谢您的回复!不幸的是,Websphere 持久性实现似乎会忽略 openjpa.Log 参数。我正在使用默认的持久性提供程序 (com.ibm.websphere.persistence.PersistenceProviderImpl),因此我可以使用容器提供的数据源。
      • 内置 OpenJPA 也可以使用容器提供的数据源——没有这个就有点没用了,不是吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-27
      • 2016-12-05
      • 1970-01-01
      • 1970-01-01
      • 2017-05-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多