Log4j 与 SLF4J:4 个差异以及何时同时使用两者

关键点

  • Log4j和SLF4J是Java程序中常用的日志库。
  • Log4j 是一个日志框架,而 SLF4J 是一个可以与不同日志框架配合使用的 API。
  • Log4j 具有更精确的分层日志记录协议,而 SLF4J 采用不太复杂的方法。
  • Log4j 享有更多的社区支持并具有更好的性能,但 SLF4J 提供了更多的灵活性和可移植性。
  • Log4j 和 SLF4J 之间的选择取决于特定的用例和偏好。

Java 程序经常使用日志记录库 Log4j 和 SLF4J。日志框架在软件开发中是不可或缺的,因为大多数开发人员的目标是任何面向客户的产品或服务的顺利、安全运行。如果没有它们,就很难及时发现、诊断和解决问题。

大多数开发人员更喜欢使用开源日志框架,因为它们享有大量支持,更不用说专有或闭源替代方案常见的使用限制较少。

说到日志记录,Log4j 和 SLF4J 是最常见的。但哪一个适合您和您的特定用例?下面让我们分解您需要了解的所有内容。

Log4j 与 SLF4J:并排比较

阿帕奇Log4j Java 的简单日志外观 (SLF4J)
它是什么? 用 Java 编写的日志实用程序,用于记录应用程序或软件中的消息 充当多个日志框架外观的实用程序
主要用途 日志框架 日志框架的抽象
初始发行 2001年 2005年
技术委员会 阿帕奇 阿帕奇
有影响力的开发商 切基·贵库 切基·贵库
开放格式? 是的 是的
受技术影响 基于Java的软件和应用程序 基于Java的软件和应用程序

Log4j 与 SLF4J:有什么区别?

最初,两者看起来是一样的 — Log4j 和 SLF4J 都为基于 Java 的应用程序和其他应用程序提供日志记录。然而,尽管 Log4j 和 SLF4J 有许多相似之处,但它们还是有很大不同。

Log4j 是一个日志框架,而 SLF4J 是一个可以与不同日志框架配合使用的 API。简而言之,Apache Log4j 是一个日志库,而 SLF4J 是一个中介/抽象实用程序,它为开发人员可以选择用作日志框架的内容以及在日志中获得的输出类型增加了更多的灵活性和简单性。

日志库是指应用程序或软件中用于记录和管理事件的一段代码。这是必要的,因为应用程序经常会遇到错误,如果不及时正确解决,可能会导致服务中断。如果出现问题,有两种情况。理想情况下,要么收到一条错误消息,解释出现问题的原因、原因和时间,以及可能的解决方案,要么反馈不明确或不全面。日志库和类似的实用程序的存在是为了防止第二种情况。

现在我们已经解决了这个问题,让我们来分析一下 Log4j 和 SLF4J 之间的主要区别。

建筑学

与具有专门构建的日志架构的 Log4j 不同,SLF4J 只是一个桥梁,没有日志架构。

虽然 SLF4J 中缺少日志记录架构可能看起来很糟糕,但它更有利,因为它现在可以支持与多个日志记录框架的集成。这为开发人员在应用程序中使用的日志框架增加了更多的余地。

Log4j 具有比 SLF4J 更精确的分层日志记录协议。日志可以分为不同级别,即从最不严重到最严重的情况。根据开发人员的偏好和应用程序的使用情况,更详细的日志可能是合适的。

SLF4J 采用了一种不太复杂的方法,对日志进行有点模糊的分类。因此,使用 SLF4J,您将找到标记为 INFO、ERROR 或 DEBUG 的日志。由此可见,Log4j 具有独立的日志架构,可以独立运行,而 SLF4J 则依赖于已实现的日志框架。

社区支持和发展

Log4j 比 SLF4J 享有更多的社区支持,最近涉及 Log4j 的安全崩溃就证明了这一点。在涉及 Log4j 和随后的 Log4j shell 的零日漏洞被宣布后不久,开源贡献者和安全研究人员投入了额外的工作来尝试解决该漏洞。

然而,这并不意味着 SLF4J 的发展没有足够的社区支持。Log4j 的存在时间比 SLF4J 长得多,当您考虑到它已嵌入到全球许多系统中这一事实时,就很容易明白为什么它享有大多数支持。Log4j 的社区支持更有必要,因为这涉及到很多问题。

尽管如此,这仍然值得商榷,而且随着 SLF4J 变得更加流行,就其所享有的社区支持量而言,它可能会接近甚至取代 Log4j。

表现

Log4j 是广泛使用的日志框架之一,这是有充分理由的。它不仅是一个高性能的日志框架,而且还易于扩展。其背后的一些原因包括它支持异步日志记录及其相对较低的内存要求。

为了简单起见,这里有一个更精炼的版本。使用异步日志记录,输入和输出操作在单独的线程上执行,而日志记录则在另一个线程上进行。这可以缩短执行时间,实际上,异步日志记录框架记录消息的速度比依赖同步日志记录的框架快 6 到 68 倍。此外,由于内存占用较低(即框架执行时需要的内存较少),Log4j 可以比 SLF4J 记录更多内容且速度相对更快。但是,根据使用 SLF4J 实现的日志框架,它的性能可能比 Log4j 更好。

SLF4J 的性能不足之处在于它具有更高的灵活性和可移植性。由于它更多的是应用程序和日志框架之间的桥梁,因此 SLF4J 的性能与实现的日志框架相关。尽管如此,这还是一线希望。根据案例使用要求或个人喜好,开发人员可以使用 SLF4J 轻松选择和实现更合适的日志框架。

此外,根据其架构(请记住它没有日志记录架构),SLF4J 比 Log4j 更轻量级,这可能会增加其可部署的应用程序类型的多功能性。

特点和灵活性

如果您正在寻找简单而灵活的日志记录解决方案,SLF4J 是正确的选择。作为开发人员,您可以轻松选择实现任何日志记录框架。但这不仅仅是 SLF4J 允许您轻松切换到不同的日志框架。借助标记支持,您可以根据需要自定义日志输出,无论您实现哪种日志框架。

Log4j 最值得注意的功能是过滤器和多个附加程序。在多个附加程序的情况下,开发人员可以指定多个记录器来生成唯一的输出。这增加了您对日志记录实例的控制级别的更细粒度。例如,使用多个附加程序,除了标准控制台输出之外,您还可以将日志配置为写入特定文件。

Log4j 中的过滤器支持可以称为 Log4j 对 SLF4J 提供的灵活性的反驳。过滤器功能允许您指定应用程序何时需要日志。某些事件或错误对应用程序的性能无关紧要,因此无需记录它们。

Log4j 与 SLF4J:8 个必须了解的事实

  • 日志记录是应用程序或软件开发中的关键组件,Log4j 比 SLF4J 嵌入到更多系统中。
  • Log4j 是一个日志框架,而 SLF4J 只是一个提供对另一个日志框架的通用访问的 API。
  • Log4j 是一个独立的日志框架,与 SLF4J 不同,SLF4J 依赖于另一个日志框架来运行。
  • SLF4J 的学习曲线相对不太陡峭,而 Log4j 对于普通用户来说可能看起来很复杂。
  • 两者都享有重要的社区支持,但 Log4j 拥有更多可用文档和支持。
  • Log4j 在 2021 年 12 月初遭遇安全漏洞,导致 Log4j shell,但开源社区贡献者和 Sun 团队随后修复了这些问题。
  • 由于异步日志记录和低内存占用,Log4j 2 在性能方面比 SLFJ 更先进。
  • Log4j 最近的安全漏洞是由未经验证的查询造成的,恶意行为者利用远程代码执行 (RCE) 最大限度地利用了这些查询。

Log4j 与 SLF4J:哪一个更适合您?

考虑到每个选项的许多相似之处和令人印象深刻的功能,在 Log4j 和 SLF4J 之间决定最佳解决方案很困难。

在性能方面,Log4j 处于领先地位。它比 SLFJ 快得多,这要归功于其较少的内存需求和异步日志记录。同样,Log4j 的广泛和长期使用也证明了它是一个可靠的解决方案。不过,这并不意味着 SLFJ 是一个糟糕的选择。使用正确的日志框架并根据用例,它的性能相当好,并且可能优于 SLFJ,尤其是以前的版本。

如果您正在寻找具有更多社区支持的日志记录解决方案,Log4j 应该适合您。由于其早期开发并在许多系统中使用,因此存在大量文档和积极支持。SLF4J 的社区支持相对较少,因为它尚未被大规模采用。但随着越来越多的人认识到 SLF4J 的简单性和多功能性,这种情况可能会发生变化。

Log4j 最近的安全漏洞可能(也可能不会)让更多人转向 SLF4J。不过,这是值得商榷的,因为这些漏洞可能会导致社区支持更加积极和警惕,以防止类似的情况发生。

Log4j 是一个成熟的日志记录框架,为复杂的日志记录提供了广泛的功能。SLF4J 更适合需要灵活、轻量级日志框架的应用程序。

Log4j 与 SLF4J:4 个差异以及何时使用这两种常见问题解答(常见问题)
Log4j可以删除吗?

是的,但这可能会影响功能。如果担心的是与 Log4j 1 相关的安全漏洞,您可以轻松升级到 Log4j 2,它具有所有必要的安全补丁。

或者,您可以切换到 SLF4J,这将为您选择日志框架提供更大的灵活性。

Log4j 是否已弃用?

对此尚未达成共识。尽管最近与 Log4j 相关的零日漏洞给整个行业带来了冲击,但它仍然是一个广泛使用的框架。

除此之外,其背后的团队已经发布了各种补丁来解决该漏洞,因此 Log4j 仍将存在一段时间。

此外,考虑到 Log4j 的广泛使用,安全崩溃可能会影响支持社区,使其更加紧密地联系并参与该框架。

SLF4J日志存储在哪里?

SLF4J 不存储日志,因为它是一个 API。相反,SLF4J 将日志定向到附加程序,该附加程序决定将日志存储在何处。

为此,您必须有一个具体的实现来指定日志的存储位置。Log4j 就是这样一种具体实现。开发人员可以选择适当的日志记录框架,如果可能的话(取决于日志记录框架),可以自定义写入的日志内容及其存储位置。

我可以在没有 Log4j 的情况下使用 SLF4J 吗?

是的。顾名思义,SLF4J 只是一个可以与其他日志框架一起使用的外观。然而,SLF4J 不能单独工作。必须有某种形式的日志记录框架,SLF4J 将调用该框架来请求访问。日志框架不一定非得是 Log4j。只要以正确的方式实施,任何方法都可以。

SLF4J可以替代Log4j吗?

不,这有很多原因。首先,Log4j 嵌入在许多系统中,虽然最近的安全问题令人担忧其长期安全性和可靠性,但漏洞已得到修复,并且 Log4j 得到了大型活跃社区的支持。

在复杂的日志记录方面,Log4j 是不可替代的。尽管如此,在 Log4j 被弃用的场景中,或者 SLF4J 的缺点得到解决的情况下,这可能会改变功能。

本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。
(0)
上一篇 2023年10月9日 上午10:51
下一篇 2023年10月9日

相关推荐

  • 三星宣布:Tizen OS即将登陆非三星智能电视

    三星已宣布与多家消费电子公司建立合作伙伴关系,此举将使他们能够在其电视中使用其TizenOS智能电视平台。Tizen是一种基于Linux的操作系统,主要由三星开发,用于其可穿戴设备…

    2022年10月11日
  • 什么是帧率以及如何为您的视频设置帧率

    您应该了解的基本要素之一是“帧速率”,以了解视频制作过程。  在谈帧率之前,我们首先要了解动画(视频)呈现的原理。  我们观看的视频是由一系列静止图像组成的。  由于每张静止图像之…

    2023年3月6日
  • 一加Buds Pro 2对比Buds Pro 2R,两款耳塞有何不同

    一加 Buds Pro 2R 是 一加 Buds Pro 2 的廉价版。这两款耳塞有何不同区别在那里,您应该选择哪一款? 一加 Buds Pro 2和 一加 Buds Pro 2R…

    2023年2月20日
  • 如何修理无法启动的烘干机,轻松搞定!

    如果您有湿衣服和无法正常工作的烘干机,请不要惊慌。 使用烘干机时,有时会遇到无法启动的情况,此时我们该如何处理呢?首先要确认烘干机已正确接通电源,并检查电源插座,确保插头接触良好。…

    2023年5月11日
  • 什么是蓝牙音频编解码器?

    在我们一般性地谈论编解码器之前,我们需要先谈谈音频压缩。音频中有有损压缩和无损压缩技术。有损压缩是一种通过使用复杂算法去除大多数人听不到的音频来减少整体文件大小的技术。顾名思义,无…

    2023年4月26日
  • 如何修理不停运转的干衣机,只需几步操作

    如果您的烘干机无法停止或您的循环时间太长,那将是一次令人沮丧的经历。但不要惊慌。我们可以提供帮助。 我的烘干机不会停止运转,这是怎么回事? 干衣机不会停止运行或运行时间过长的潜在原…

    2023年5月11日
  • 如何在电脑上使用Google Home应用,快捷方法

    如果您使用手机上的Google Home应用程序来管理您的智能家居设备,您可能想知道是否可以在您的PC上执行相同的操作。答案是有时候。 该应用程序旨在与安卓和iOS移动设备配合使用…

    2023年4月17日
  • 蓝牙协议AAC什么是技术,AAC对比SBC那个音质更好!

    SBC是最基本的解码器,比特率最低,所以音质最低。AAC是SBC的升级版。蓝牙解码器的组合适合不同的音频设备,提供不同的连接和音色。所有蓝牙设备都支持标准化的SBC(低复杂性子带编…

    2023年5月5日
  • 佳能RF 15-30mm F4.5-6.3 IS STM评测

    佳能 RF 15-30mm F4.5-6.3 IS STM(549.99 美元)是 EOS R 相机的实际预算广角变焦镜头。它的对焦范围与高端 L 系列镜头类似,例如RF 14-3…

    2024年1月13日
  • 如何重置泛数字电子书阅读器

    泛数字小说电子书阅读器是一款运行Android操作系统的多媒体设备。作为用户,您可以下载或购买书籍以及安装适用于 Android 平台的应用程序。如果您在使用 Pandigital…

    2023年8月18日