当我有使用 JCL 记录的代码但我希望它使用 SLF4J 时,是否使用 jcl-over-slf4j-1.7.5.jar?或者是其他东西?
jcl-over-slf4j.jar
如果您想将应用程序从使用 JCL 迁移到 SLF4J ,则应该使用。JCL 和 SLF4J 都作为各种日志框架的简单外观或抽象,例如 Log4J。SLF4J 被认为是比 JCL 更好的解决方案,因为它解决了与 JCL 发现机制相关的各种类加载问题。请注意,JCL 的 1.1 版本包括一些旨在解决这些类加载问题的更改。
有几个用例你想用 SLF4J 替换 JCL:
- 解决与公共日志相关的类加载器问题
- 您意识到 SLF4J 是比 JCL 更好的日志记录外观
- 您想使用原生实现 SLF4J API 的logback
虽然您可以通过将 JCL API 调用替换为 SLF4J API 调用来完全将 JCL 的使用替换为 SLF4J,但 JCL over SLF4J 实现将允许您逐渐迁移到 SLF4J,特别是如果您的软件所依赖的某些库继续使用 JCL (例如Spring 框架)。
我什么时候使用 jul-to-slf4j-1.7.5.jar?这里的“to”这个词与“over”的用法有什么不同?
jul-to-slf4j-1.7.5.jar
如果您的应用程序使用java.util.logging
(JUL) 作为其日志框架,并且您希望将其替换为 SLF4J 作为日志外观,并且可以在其他日志实现之间自由选择,则您应该使用。JUL 提供JavaTM 2 平台的核心日志记录工具的类和接口。与重新实现 JCL相反jcl-over-slf4j
,该jul-to-slf4j
模块没有重新实现,java.util.logging
因为 java.* 命名空间下的包无法替换。相反,jul-to-slf4j 包含一个 java.util.logging (jul) 处理程序,即SLF4JBridgeHandler,它将所有传入的 jul 记录路由到SLF4j API。请注意 SLF4J 关于此解决方案性能的注释。
为什么 JUL 没有“over”JAR?为什么 JCL 和 log4j 没有“to”JAR?
如上一节所述,java.* 命名空间下的包不能被替换,因此不可能创建“from”桥接模块,而是使用将 JUL API 调用路由到SLF4J 的解决方案。对于其他桥接模块,这种开销根本没有必要。