in

Log4j vs. SLF4J:4个区别以及何时同时使用

java程序经常使用日志库log4j和slf4j。日志框架在软件开发中是不可或缺的,因为大多数开发人员的目标是使任何面向客户的产品或服务平稳且安全地运行。没有它们,很难及时发现、诊断和解决问题。

大多数开发人员更喜欢使用开源的日志框架,因为它们享有广泛的支持,并且与专有或闭源的替代方案相比,使用限制较少。

在日志记录方面,log4j和slf4j是最常见的。但是哪个适合您和您的特定用例呢?让我们在下面详细介绍一切您需要知道的信息。

log4j与slf4j:并排比较

apache log4jjava的简单日志门面(slf4j)
它是什么?用于记录应用程序或软件中的消息的java日志实用程序用于多个日志框架的门面实用程序
主要用途日志框架日志框架的抽象
初始发布日期2001年2005年
技术委员会apacheapache
有影响力的开发人员ceki guicuceki guicu
是否开放格式?
受影响的技术基于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取决于实现的日志框架。

社区支持和开发

相比slf4j,log4j拥有更多的社区支持,这一点可以从最近涉及log4j的安全问题得以证实。在关于log4j的零日漏洞以及随之而来的log4j shell的公告之后,开源贡献者和安全研究人员加倍努力以解决这个漏洞。

然而,这并不意味着slf4j的开发没有足够的社区支持。log4j比slf4j存在时间更长,再加上它嵌入在全球许多系统中的事实,很容易理解为什么它享有大多数支持。log4j的社区支持更像是一种必需,因为有很多利益攸关。

然而,这仍然有争议,随着slf4j变得越来越普遍,它可能会接近甚至取代log4j在社区支持方面所受到的支持程度。

性能

log4j是一种广泛使用的日志框架,原因是不言而喻的。它不仅是一个高性能的日志框架,而且易于扩展。其中一些原因包括它支持异步日志记录以及其相对较低的内存需求。

为了简化起见,这是一个更简化的版本。使用异步日志记录,输入和输出操作在一个单独的线程上进行,而日志记录在另一个线程上进行。这样可以缩短执行时间,在实践中,异步日志记录框架的日志消息可以比依赖同步日志记录的框架快6到68倍。此外,由于内存占用较低(即框架执行所需的内存较少),log4j可以比slf4j更快地记录更多的日志。然而,这取决于与slf4j一起实现的日志框架,它可能比log4j表现更好。

slf4j在性能方面的不足,用更多的灵活性和可移植性来弥补。由于它更像是应用程序和日志框架之间的桥梁,slf4j的性能与实现的日志框架相关。然而,这更像是一个好的方面。根据用例要求或个人偏好,开发人员可以轻松选择和实现更合适的日志框架与slf4j结合使用。

此外,根据其架构(记住它没有日志架构),slf4j比log4j更轻量级,这可能增加了它在可部署的应用程序类型方面的灵活性。

log4j适用于复杂的日志记录,而slf4j提供更好的灵活性。

©alexander limbach/shutterstock.com

功能和灵活性

slf4j是一个简单灵活的日志记录解决方案的正确选择。作为开发者,您可以轻松选择实现任何日志记录框架。但不仅如此,slf4j还允许您轻松切换到不同的日志记录框架。通过标记支持,您可以根据自己的喜好自定义日志记录输出,而不管实施哪个日志记录框架。

log4j最值得注意的特性是过滤器和多个附加器。在多个附加器的情况下,开发者可以指定多个记录器以生成唯一的输出。这增加了您在日志实例的控制级别方面的更多细粒度。例如,使用多个附加器,您可以配置日志在标准控制台输出之外写入特定文件。

log4j中的过滤器支持可以被称为对slf4j提供的灵活性的回应。过滤器功能让您可以指定何时需要应用程序的日志记录。对于某些事件或错误,对应用程序性能来说是无关紧要的,所以没有必要记录它们。

log4j vs. slf4j:8个必须知道的事实

  • 日志记录是应用程序或软件开发中的关键组成部分,log4j嵌入的系统比slf4j多。
  • log4j是一个日志记录框架,而slf4j只是一个提供对另一个日志记录框架的通用访问的api。
  • log4j是一个独立的日志记录框架,而slf4j依赖于另一个日志记录框架来运行。
  • slf4j的学习曲线相对较平缓,而log4j对于普通用户来说可能会显得更复杂。
  • 两者都得到了重要的社区支持,但是log4j有更多的文档和支持可用。
  • log4j在2021年12月初遭受了安全漏洞,导致出现了一个log4j shell,但是开源社区的贡献者和sun团队随后修复了这些问题。
  • 性能方面,log4j比slfj更先进,这要归功于异步日志记录和低内存占用。
  • log4j最近的安全漏洞是由于未经验证的查询引起的,恶意行为者利用了这些查询进行了远程代码执行。

log4j vs. slf4j:哪个更适合您?

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

在性能方面,log4j领先。由于其较低的内存需求和异步日志记录,它比slfj快得多。同样,log4j的广泛和长期的使用证明了它是一个可靠的解决方案。但这并不意味着slfj是一个糟糕的选择。通过正确的日志记录框架和根据使用情况,它表现得相当不错,并且可能优于slfj,特别是以前的版本。

如果您正在寻找更多社区支持的日志记录解决方案,log4j应该是适合您的选择。由于它的早期开发和在许多系统中的使用,存在大量的文档和积极的支持。由于slf4j尚未广泛采用,因此它的社区支持相对较少。但随着越来越多的人了解slf4j的简单性和多功能性,这种情况可能会发生变化。

log4j最近的安全漏洞可能会(或可能不会)使更多的人转向slf4j。尽管存在争议,但这些漏洞可能会导致社区支持更加积极和警惕,以防止类似事件的发生。

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

Written by