slf4j-log4j12与log4j之间的差异

时间:2017-11-30 13:29:09

标签: java log4j slf4j slf4j-api

在项目中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和&amp;之间的区别吗? log4j

4 个答案:

答案 0 :(得分:3)

slf4j-log4j12提供了SLF4J和Log4J之间的桥梁,因此它了解SLF4J和Log4J。

根据the docs

  

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

如果希望SLF4J将日志记录路由到Log4J,则必须提供两个依赖项。再次,来自文档:

  

只需将Log4j 2 SLF4J Binding jar以及Log4j 2 jar和SLF4J API jar包括在内,即可使Log4j 2处理所有SLF4J日志记录。

答案 1 :(得分:0)

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

<强> log4j的:

logger.debug("This is log message:" + msg);
每次评估行时都会连接

log4j字符串,即使日志级别低于debug,也不会使用该字符串。

<强> SLF4J:

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

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

唯一的区别是表现。由于字符串连接与log4j比较,slf4j将占用更多时间。

答案 2 :(得分:0)

总结:

 <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'的错误确实花费了我很多时间

答案 3 :(得分:-1)

SLF4J:

日志记录组件的抽象层。 我们可以在没有太多代码更改的情况下更改日志记录。

的Log4j:

一个日志记录组件,它提供了日志记录的核心功能。