4

SLF4J(1.7.5,但实际上是任何现代版本)附带了几个“over”(迁移器)JAR:

  • jcl-over-slf4j-1.7.5.jar
  • log4j-over-slf4j-1.7.5.jar

...以及“到”(桥)JAR:

  • jul-to-slf4j-1.7.5.jar

根据他们的文档,迁移者:

...从 [JCL/log4j] 轻松迁移到 SLF4J。此 jar 文件旨在替代 [JCL/log4j]。它实现了 [ir] 公共 API,但在下面使用 SLF4J,因此名称为“over” SLF4J。

鉴于,JUL 桥:

将所有传入的 jul 记录路由到 SLF4j API。

  1. 当我jcl-over-slf4j-1.7.5.jar有使用 JCL 记录的代码但我希望它使用 SLF4J 时,我是否会使用它?或者是其他东西?
  2. 我什么时候用jul-to-slf4j-1.7.5.jar?这里的“to”这个词与“over”的用法有什么不同?
  3. 为什么 JUL 没有“over”JAR?为什么 JCL 和 log4j 没有“to”JAR?
4

2 回答 2

11

首先,这些 jars 适用于您的项目具有无法控制的依赖项的情况,并且这些依赖项使用JUL( java.util.logging )、JCL( Jakarta Commons Logging ) 或者log4j您希望通过所有日志记录操作路由slf4j-api. _ 可以将其视为用slf4j-api等效项动态替换对那些遗留日志记录 API 的所有调用。

这 3 个 jar 中的每一个都为其各自的遗留日志框架做同样的事情。命名(overto)的差异源于此翻译的完成方式。

考虑到上述情况,这里是您问题的答案:

  1. 如果代码在您的控制之下,您不妨JCL用正确的调用替换所有调用slf4j-api(任何其他遗留框架也是如此)。如果源代码不在您的控制范围内,或者您不想替换它们,您可以jcl-over-slf4j-1.7.5.jar在类路径中包含并排除 commons-logging.jar。这是因为jcl-over-slf4j-1.7.5.jar包含相同的类(或其子集)被commons-logging.jar重写以将所有日志记录活动发送到slf4j-api. 因此得名

  2. jul-to-slf4j-1.7.5.jar以稍微不同的方式发挥它的魔力——因此得名JUL使用处理程序。处理程序是任何扩展的类,java.util.logging.Handler旨在处理(猜猜是什么)日志消息(或JUL 术语中的记录)。所以在这种情况下,为了将所有JUL日志记录路由到,slf4j-api我们只需要确保我们只注册一个这样的处理程序 - the SLF4JBridgeHandler(它恰好是 中包含的唯一类jul-to-slf4j-1.7.5.jar)。可以在此处找到执行此操作的配置选项。

  3. overto之间的区别现在应该很明显了。over jars 通过将原始 jars 的相同类替换为将所有日志记录路由到slf4j-api. 由于处理程序的操作方式, JUL to jar 不需要执行相同类型的类重写(并且您只需要配置一个将所有日志记录路由到的处理程序)。JULslf4j-api

有关更多遗留注释,请查看优秀的 slf4j遗留文档,并确保查看大图(也链接到主要遗留文章)。

希望这可以帮助。

于 2013-09-04T00:18:08.050 回答
0

当我有使用 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 的解决方案。对于其他桥接模块,这种开销根本没有必要。

于 2013-09-10T20:27:15.033 回答