是否可以在特定 GlassFish 应用程序中使用 SLF4J 并仅为该应用程序配置 SLF4J?我们目前正在努力解决GlassFish 本身 安装了 Hibernate的 GlassFish在其 lib 目录中包含 SLF4J API 和记录器绑定这一事实。
我们的团队正在开发一个 Java EE 6 Web 应用程序。对于开发,应用程序部署在 GlassFish 3.1.2 上,但它应该尽可能便携。
我们决定使用 SLF4J 来记录应用程序消息。根据消息级别,应用程序必须以不同方式处理某些日志消息,因此必须能够自行配置日志记录后端——而不是在应用程序服务器中配置日志记录。
不幸的是,GlassFish 3.1.2在其 lib 文件夹中包含slf4j-api-1.5.8.jar和slf4j-jdk14-1.5.8.jar 。这可以防止我们的应用程序使用slf4j-api-1.7.5.jar和slf4j-simple-1.7.5.jar(后者最终将被另一个绑定替换)。
有没有办法告诉 GlassFish 在考虑自己的应用程序库之前考虑应用程序库(以便使用正确版本的 API)以及确保使用应用程序提供的 SLF4J 绑定的任何方法?
我们使用 Eclipse 进行开发,但我们没有使用 Maven。到目前为止,我发现的大多数调整/解决方法都是指我们无法使用的 Maven 中的配置。如果您可以提供任何 Eclipse 特定的提示,那就太好了。在 Eclipse 项目的属性中,我已经配置了构建路径的顺序,以便 Web App Libraries 位于顶部。但不知何故,这似乎还不够。
非常感谢您的帮助!
更新 1:为了让它暂时工作,我刚刚从 GlassFish lib 目录中删除了 SLF4J 库。然后,应用程序使用它自己提供的 SLF4J 库。但我不认为这是部署过程的解决方案,我不确定这是否会破坏 GlassFish 使用的任何东西(为什么这些库仍然存在?),这对我们的开发团队来说不是一个实用的解决方案。
更新 2:实际上不是GlassFish 包含了开箱即用的干扰 SLF4J 库,而是我通过更新工具安装的Hibernate JPA包。我们目前不需要 Hibernate JPA,但在某些时候可能会出现更改为 Hibernate 的要求,我们还希望使应用程序易于移植到安装了 Hibernate JPA 或其他包含 SLF4J 的包的应用程序服务器上。我相应地更新了问题标题。如何解决干扰应用服务器和应用程序依赖关系的普遍问题?