Spl*_*ioo 16 logging log4j bridge adapter slf4j
我真的不明白 log4j-to-slf4j.jar 和 log4j-over-slf4j.jar 之间的区别。根据我在互联网上读到的
\n\nlog4j-to-slf4j.jar:(https://logging.apache.org/log4j/2.x/log4j-to-slf4j/index.html)
\n\n\n\n\n“Log4j 2 到 SLF4J 适配器允许将编码为 Log4j 2 API 的应用程序路由到 SLF4J。使用此适配器可能会导致性能损失,因为 Log4j 2 消息在传递之前必须进行格式化到 SLF4J。使用 Log4j 2 作为实现,通常仅当它们被 Filter 或 Appender 访问时才会被格式化。”
\n
log4j-over-slf4j.jar ( http://www.slf4j.org/legacy.html )
\n\n\n\n\n“它允许 log4j\n 用户将现有应用程序迁移到 SLF4J,而无需更改\xc2\xa0a\n 单行代码\xc2\xa0,而只需将\xc2\xa0log4j.jar\xc2\xa0file\n 替换为\xc2\xa0log4j -over-slf4j.jar,如下所述。log4j-over-slf4j\n 模块包含最广泛使用的 log4j 类的替换,即\n org.apache.log4j.Category、org.apache.log4j.Logger、\n org.apache.log4j.Priority、org.apache.log4j.Level、\n org.apache.log4j.MDC 和 org.apache.log4j.BasicConfigurator。这些\n 替换类将所有工作重定向到其对应的 SLF4J\n 类”。
\n
据我了解,两者都解决同一问题。但具体区别在哪里呢?桥接器与适配器?
\n\n多谢!
\nAvi*_*Avi 10
在 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。罐
在大多数情况下,从 log4j 迁移到 SLF4J 只需要替换 jar 文件即可。
-- http://www.slf4j.org/legacy.html
总之,它们完成相同的事情,但执行方式非常不同,并且用于不同的 log4j 版本(1 与 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。
所以我认为我混合了苹果和梨。