在WebSphere上使用slf4j进行OpenJPA日志记录

在WebSphere上使用slf4j进行OpenJPA日志记录,websphere,slf4j,openjpa,Websphere,Slf4j,Openjpa,我的JavaEE6应用程序使用slf4j和logback作为日志框架。 现在我想将OpenJpa的SQL跟踪添加到我的日志文件中。OpenJpa文档说,我可以使用一个参数: <property name="openjpa.Log" value="slf4j"/> 我使用WebSphereApplicationServerV8.0.0.1作为JavaEE容器。如果将应用程序部署到服务器,则此参数不会改变任何内容。我可以在WebSphere管理控制台中更改日志级别,这很好。但是a不

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

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

我使用WebSphereApplicationServerV8.0.0.1作为JavaEE容器。如果将应用程序部署到服务器,则此参数不会改变任何内容。我可以在WebSphere管理控制台中更改日志级别,这很好。但是a不能绕过OpenJpa日志记录到我的slf4j框架

是否有人使用这种配置并解决了问题

顺便说一句,我知道,信息中心的文章
表示该参数将被忽略,但一切都应该是可能的,嗯?

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

在OpenJPA1.x中,不可能使用“slf4j”。解决方法是将类
org.apache.openjpa.lib.log.SLF4JLogFactory
从openjpa 2.x源复制到您的应用程序中,并直接使用它:

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

您可以始终直接指定工厂类名,短名称只是一种方便的技巧

在OpenJPA2.x中,存在
SLF4JLogFactory
,因此它应该与您当前的设置一起工作;也许您将其设置在被其他配置覆盖的位置?例如,如果您通过
EntityManagerFactory
的propertyMap配置JPA,它将优先于
persistence.xml

中的设置

有四件事要做:

  • 假设OpenJpa记录这些语句。这是由persistence.xml中的属性项完成的
  • 假设Slf4j也必须从七月获取日志。这可以通过SLF4J安装SLF4JBridgeHandler来完成。我通过在应用程序启动时调用的ServletContextListener安装了网桥
  • 配置Logback,使其不会记录七月的所有日志,而只记录所需的日志。这是通过在logBack-test.xml中添加LevelChangePropagator来实现的
  • 要求WebSphereTraceService将日志从OpenJPA传递给应用程序。这是WebSphere管理控制台中的一个设置

  • 非常感谢您的回复!不幸的是,WebSpherePersistence实现似乎会忽略openjpa.Log参数。我使用的是默认的持久性提供程序(com.ibm.websphere.persistence.PersistenceProviderImpl),因此我可以使用容器提供的数据源。内置的OpenJPA也可以使用容器提供的数据源——如果没有这个,它会有点无用,不是吗?