Log4j和SLF4J的区别

SLF4J(用于Java的简单日志记录外观)是一种API, 旨在提供对许多日志记录框架的通用访问, 其中log4j是其中之一。
它基本上是一个抽象层。它不是日志记录实现。这意味着如果你正在编写库并且使用SLF4J, 则可以将该库提供给其他人使用, 并且他们可以选择将SLF4J与哪种日志记录实现一起使用, 例如log4j或Java日志记录API。它用于防止应用程序依赖于不同的日志记录API, 就像它们使用依赖于它们的库一样。
但是, 我们详细介绍了Log4J和SLF4J之间的区别, 该区别仅应获得一个行答案。即问题本身是错误的。 SLF4J和Log4J不同, 或者它们不是相似的组件。就像指定的名称一样, SLF4J是Java的简单日志记录外观。它不是日志记录组件, 甚至也不执行实际的日志记录。它只是基础日志记录组件的抽象层。
对于Log4j, 它是一个日志记录组件, 并且执行指示的日志记录。因此, 可以说SLF4J和Log4J在逻辑上是两件事。

Log4j和SLF4J的区别

文章图片
现在, 你只需选择运行时需要使用的日志记录框架即可。为此, 你将需要包括两个jar文件:
  • SLF4J绑定jar文件
  • 所需的日志记录框架jar文件
例如, 要在项目中使用log4j, 你将需要包含以下jar文件:
  • slf4j-log4j12-1.7.12.jar
  • log4j-1.2.17.jar
将两个jar文件都放置在应用程序类路径中后, SLF4J将自动检测到它, 并开始根据你在log4j配置文件中提供的配置使用log4j来处理日志语句。
例如, 下面的代码可以在项目类文件中编写:
import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class HelloWorld{public static void main(String[] args){Logger logger = LoggerFactory.getLogger(HelloWorld.class); logger.info("Hello World"); }}

为什么SLF4J比Log4J更好? 在SLF4J和Log4j之间总是很难选择一个。如果你有选择, 我建议你;日志记录抽象总是比日志记录框架更可取。如果使用日志记录抽象(尤其是SLF4J), 则可以迁移到部署时所需的任何日志记录框架, 而无需选择单一依赖项。
以下是原因, 足以选择SLF4J而非Log4j:
  • 最好总是使用抽象。
  • SLF4J是一个开放源代码库或内部库, 使它独立于任何特定的日志记录实现, 这意味着无需管理多个库的多个日志记录配置。
  • SLF4J提供基于占位符的日志记录, 该日志记录通过删除诸如isInforEnabled(), isDebugEnabled()等检查来提高代码的可读性。
  • 通过使用SLF4J的日志记录方法, 我们将构建日志消息(字符串)的成本推迟到你需要时为止, 这既节省了CPU内存, 又节省了内存。
  • 由于SLF4J使用较少数量的临时字符串, 这意味着垃圾收集器的工作量减少了, 这意味着你的应用程序具有更好的吞吐量和性能。
【Log4j和SLF4J的区别】因此, 从本质上讲, SLF4J不会替代log4j。他们俩一起工作。它从你的应用程序中删除了对log4j的依赖关系, 并使得将来使用功能更强大的库轻松替换它。

    推荐阅读