SLF4J(用于Java的简单日志记录外观)是一种API, 旨在提供对许多日志记录框架的通用访问, 其中log4j是其中之一。
它基本上是一个抽象层。它不是日志记录实现。这意味着如果你正在编写库并且使用SLF4J, 则可以将该库提供给其他人使用, 并且他们可以选择将SLF4J与哪种日志记录实现一起使用, 例如log4j或Java日志记录API。它用于防止应用程序依赖于不同的日志记录API, 就像它们使用依赖于它们的库一样。
但是, 我们详细介绍了Log4J和SLF4J之间的区别, 该区别仅应获得一个行答案。即问题本身是错误的。 SLF4J和Log4J不同, 或者它们不是相似的组件。就像指定的名称一样, SLF4J是Java的简单日志记录外观。它不是日志记录组件, 甚至也不执行实际的日志记录。它只是基础日志记录组件的抽象层。
对于Log4j, 它是一个日志记录组件, 并且执行指示的日志记录。因此, 可以说SLF4J和Log4J在逻辑上是两件事。
文章图片
现在, 你只需选择运行时需要使用的日志记录框架即可。为此, 你将需要包括两个jar文件:
- SLF4J绑定jar文件
- 所需的日志记录框架jar文件
- slf4j-log4j12-1.7.12.jar
- log4j-1.2.17.jar
例如, 下面的代码可以在项目类文件中编写:
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 Maven配置
- Log4j日志Appenders解释
- Log4j-PatternLayout日志
- Log4j属性详细解释
- Log4J日志文件
- 2022全新版!Java分布式架构设计与开发实战一起fen享
- 【JAVA基础】== 与 equals区别
- 在.NET Core console application中使用User Secrets(用户机密)
- Android Studio 导入 Eclipse项目 报 Some file crunching failed, see logs for details