【问题标题】:Difference between log4j-to-slf4j and log4j-over-slf4jlog4j-to-slf4j 和 log4j-over-slf4j 之间的区别
【发布时间】:2020-07-13 07:40:19
【问题描述】:

我真的不明白 log4j-to-slf4j.jar 和 log4j-over-slf4j.jar 之间的区别。根据我在网上看到的内容

log4j-to-slf4j.jar: (https://logging.apache.org/log4j/2.x/log4j-to-slf4j/index.html)

“Log4j 2 到 SLF4J 适配器允许应用程序编码到 Log4j 2 要路由到 SLF4J 的 API。使用此适配器可能会造成一些损失 性能作为 Log4j 2 消息必须先格式化,然后才能使用 传递给 SLF4J。使用 Log4j 2 作为实现,这些将 通常只有当它们被过滤器访问时才被格式化,或者 追加器。”

log4j-over-slf4j.jar (http://www.slf4j.org/legacy.html)

"它允许 log4j 用户将现有应用程序迁移到 SLF4J 而无需更改 单行代码,但只需替换 log4j.jar 文件 使用 log4j-over-slf4j.jar,如下所述。 log4j-over-slf4j 模块包含最广泛使用的 log4j 类的替换,即 org.apache.log4j.Category, org.apache.log4j.Logger, org.apache.log4j.Priority, org.apache.log4j.Level, org.apache.log4j.MDC 和 org.apache.log4j.BasicConfigurator。这些 替换类将所有工作重定向到它们对应的 SLF4J 类。”

据我了解,两者都解决了相同的问题。但具体的区别在哪里?桥接器与适配器?

非常感谢!

【问题讨论】:

    标签: logging log4j adapter slf4j bridge


    【解决方案1】:

    在 Log4j 2 中,API 与实现是分开的。

    log4j-api.jar: (https://logging.apache.org/log4j/2.x/log4j-api/index.html)

    Log4j 2 API 提供应用程序应编码的接口,并提供实现者创建日志记录实现所需的适配器组件。

    log4j-core.jar: (https://logging.apache.org/log4j/2.x/log4j-core/index.html)

    Apache Log4j 实现

    这种解耦允许使用 log4j API 和不相关的支持日志记录实现,就像使用 slf4j 一样。

    log4j-to-slf4j 是从哪里来的?通常在引入使用 log4j API 的依赖项时。例如,一个应用程序可以使用 slf4j + 一个非 log4j 日志实现,然后添加一个使用 log4j API 的依赖项。使用 log4j-to-slf4j 应用程序的 slf4j 日志消息和依赖项的 log4j 日志消息都将被路由到同一个地方(日志实现)。

    同时,log4j 1 没有 API/实现分离。之前概述的情况可能仍会出现。在这种情况下,log4j-over-slf4j 可以用作 log4j.jar 的替代品(即 log4j 1)。

    它是如何工作的?

    log4j-over-slf4j 模块包含最广泛使用的 log4j 类的替换...要在您自己的应用程序中使用 log4j-over-slf4j,第一步是找到 log4j.jar,然后用 log4j-over 替换-slf4j.jar

    在大多数情况下,从 log4j 迁移到 SLF4J 只需替换 jar 文件。

    -- http://www.slf4j.org/legacy.html

    总而言之,它们完成相同的事情,但做起来却大不相同,并且用于不同的 log4j 版本(1 与 2)。

    【讨论】:

      【解决方案2】:

      如果我错了,请纠正我 - 将尝试回答我的问题。

      我刚刚查看了 mvnrepository.org - 在 2.x 版本下没有 log4j-to-slf4j.jar 并且从我上面粘贴的链接中说这是 log4j-2 的适配器.x 而不是 1.x。它也是由 Apache 基金会提供的。

      相反,log4j-over-slf4j.jar 记录在 slf4j.org 上,并将 log4j-1.x 记录重定向到 slf4j-api。

      所以我认为我混合了苹果和梨。

      【讨论】:

      • 我想你明白了。最大的不同是 log4j 有两个版本。 log4j-over-slf4j 通过负责将消息发送到 slf4j(然后将其进一步转发到您用于日志记录的任何框架)来帮助将遗留代码迁移到新的日志记录框架。 log4j-to-slf4j 有相同的作用,但不是专门为遗留项目迁移而设计的(我猜仍然可以用于此)不要忘记:如果 GAV 标识符中有“日志记录”,则表示 log4j2.X .让我更容易区分
      【解决方案3】:

      log4j-to-slf4j.jar: Log4j 2 到 SLF4J 适配器允许将编码到 Log4j 2 API 的应用程序路由到 SLF4J。

      log4j-over-slf4j.jar : 它允许 log4j 用户 将现有应用程序迁移到 SLF4J 而无需更改一行代码,只需将 log4j.jar 文件替换为 log4j-over-slf4j.jar

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-05-14
        • 2023-03-21
        • 2017-01-26
        • 2020-09-20
        • 1970-01-01
        • 2016-11-11
        • 1970-01-01
        • 2013-10-16
        相关资源
        最近更新 更多