当前位置: 首页 > 教程 > Log4j >

Log4j 与 SLF4J

精华
小牛编辑
102浏览
2023-03-14

SLF4J 与 Log4j 的区别

SLF4J(Simple Logging Façade for java)是一个 API,旨在提供对许多日志框架的通用访问,log4j 就是其中之一。

它基本上是一个抽象层。它不是日志记录实现。这意味着如果您正在编写一个库并且您使用 SLF4J,您可以将该库提供给其他人使用,他们可以选择与 SLF4J 一起使用的日志记录实现,例如 log4j 或 Java 日志记录 API。它用于防止应用程序依赖于不同的日志 API,就像它们使用依赖它们的库一样。

SLF4J 和 Log4J 不同,或者它们不是相似的组件。正如所指定的名称,SLF4J 是一个简单的 java 日志记录外观。它不是一个日志组件,甚至它也不做实际的日志记录。它只是底层日志组件的抽象层。

在Log4j的情况下,它是一个日志组件,它执行指示的日志记录。所以我们可以说 SLF4J 和 Log4J 在逻辑上是两个不同的东西。

现在,您只需选择在运行时需要使用哪个日志记录框架。为此,您需要包含两个 jar 文件:

  • SLF4J绑定jar文件
  • 所需的日志框架 jar 文件

例如,要在您的项目中使用 log4j,您需要包含以下 jar 文件:

  • slf4j-log4j12-1.7.12.jar
  • log4j-1.2.17.jar

一旦你将两个 jar 文件放在你的应用程序类路径中,SLF4J 将自动检测它并开始使用 log4j 根据你在 log4j 配置文件中提供的配置来处理日志语句。

例如,您可以在项目类文件中编写以下代码:

package cn.xnip;

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 使用较少数量的临时字符串意味着垃圾收集器的工作更少,这意味着您的应用程序的吞吐量和性能更好。

所以本质上,SLF4J 并没有取代 log4j;他们一起工作。它从您的应用程序中删除了对 log4j 的依赖,并且可以在将来使用功能更强大的库轻松替换它。