12

在一个项目中pom.xml,我看到了如下所示的依赖项

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.5</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>1.7.5</version>
    </dependency>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>

slf4j-log4j12有人可以让我知道& 和 有什么区别log4j吗?

4

4 回答 4

12

日志4j 1.2

slf4j-log4j12在 SLF4J 和 Log4j 1.2 之间提供了一座桥梁,以便 SLF4J 知道如何使用 Log4j 进行日志记录。

您正在使用 Log4j 1.2。该版本的绑定由 SLF4J 项目维护。以下是SLF4J 文档的摘要:

SLF4J 支持各种日志框架。SLF4J 发行版附带了几个称为“SLF4J 绑定”的 jar 文件,每个绑定对应一个受支持的框架。

slf4j-log4j12-1.7.28.jar

log4j 1.2 版的绑定,一个广泛使用的日志框架。您还需要将 log4j.jar 放在您的类路径中。

日志4j 2

如果您使用的是 Log4j 2 或更高版本,您将需要一个不同于slf4j-log4j12. 该绑定由 Log4j 项目维护。根据 Log4j 文档

Log4j 2 SLF4J 绑定允许编码到 SLF4J API 的应用程序使用 Log4j 2 作为实现。

如果您希望 SLF4J 将日志记录路由到 Log4j,则必须提供这两个依赖项。同样,来自 Log4j 2 文档:

只需将 Log4j 2 SLF4J Binding jar 与 Log4j 2 jar 和 SLF4J API jar 一起包含,即可使所有 SLF4J 日志记录由 Log4j 2 处理。

于 2017-11-30T13:46:09.410 回答
4

总结一下:

 <dependency> <!--Facade for logging systems-->
   <groupId>org.slf4j</groupId>
   <artifactId>slf4j-api</artifactId>
   <version>1.7.25</version>
 </dependency>

 <dependency> <!--Log4j 2 implementation for slf4j-->
   <groupId>org.apache.logging.log4j</groupId>
   <artifactId>log4j-slf4j-impl</artifactId>
   <version>2.12.0</version>
 </dependency>

此外,请确保您使用的是log4j2属性文件。使用“log4j.xml”的错误确实让我花了很多时间

于 2019-08-02T13:00:58.630 回答
0

我将发布有关这些记录器消息的一些要点。

日志4j:

logger.debug("This is log message:" + msg);

log4j即使日志级别低于调试,每次评估该行时都会连接字符串,因此永远不会使用该字符串。

slf4j:

logger.debug("this is log slf4j message",msg);

slf4j字符串和参数被传递给记录器,只有在实际使用日志消息时才会替换它们。

唯一的区别是性能。与. log4j_slf4j

于 2017-11-30T13:47:36.317 回答
-1

slf4j:

日志组件的抽象层。我们可以随时更改日志记录,而无需对代码进行太多更改。

日志4j:

提供日志记录核心功能的日志记录组件。

于 2017-11-30T18:04:19.487 回答