slf4j和log4j2的Maven设置查询

29
我在项目中使用log4j2和slf4j,并使用maven进行构建。我正在使用以下pom文件(仅显示相关依赖项),但是在使用此pom文件时会出现以下错误,请问我需要添加/删除什么才能使其正常工作?我已经访问了错误信息中的URL以及log4j2依赖页面,所以请不要在回复中简单地指向URL。

Message:

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.

pom文件

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <slf4j.version>1.7.7</slf4j.version>
</properties>

   <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>${slf4j.version}</version>
    </dependency>


    <dependency>
        <groupId>com.lmax</groupId>
        <artifactId>disruptor</artifactId>
        <version>3.2.0</version>
    </dependency>

     <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>2.0.1</version>
     </dependency>

     <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.0.1</version> 
     </dependency>

更新: 我在我的pom文件中添加了以下依赖项,并在我的maven仓库中看到了这个jar-尽管当我运行mvn clean/install时仍然看到相同的消息

    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-slf4j-impl</artifactId>
        <version>2.0.1</version>
    </dependency>
4个回答

26
您的pom文件中似乎缺少以下内容。
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-slf4j-impl</artifactId>
    <version>2.0.1</version>
</dependency>

1
groupId 应该是 "org.apache.logging.log4j",版本为 "2.0.1",如此处所述:http://logging.apache.org/log4j/2.x/maven-artifacts.html。 - sheltem
1
我的错误 - 是的,版本应该是2.0.1而不是beta版,并且不带适配器组ID。 - ali haider
2
@user3813256,如果答案没有解决问题,为什么要将其标记为正确答案? - Danny Bullis

10

你的log4j2配置是正确的(POM方面),但你没有告诉slf4j它应该写入哪个位置(后端部分)。

你应该将它添加到你的pom文件中。

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-slf4j-impl</artifactId>
    <version>2.0.1</version>
</dependency>

这是Log4j 2 SLF4J Binding。根据Log4j 2 SLF4J Binding文档Log4j 2 SLF4J Binding允许使用SLF4J API编写的应用程序将Log4j 2用作实现

如果仍然无法工作,可能是因为Eclipse m2e在slf4j方面有问题。根据StackOverflow上此详细帖子“SLF4J:未能加载类“org.slf4j.impl.StaticLoggerBinder”。错误”,解决方法可能是使用外部maven进行构建。


当我通过eclipse运行maven clean/install时,我仍然看到相同的消息。我似乎在我的maven repo中拥有所有的依赖项 - slf4j=api-1.7.7、log4j-slf4j-impl-2.0.1、log4j-api-2.0.1、log4j-core-2.0.1,但当我运行maven时仍会收到该消息,并且我的日志文件输出不会生成。当我不使用maven但在我的lib目录中拥有所有jar并使用eclipse进行构建路径时,我可以使用相同的log4j2 xml文件获得文件输出。 - user3813256
@user3813256:我希望这已经足够了,因为我不使用Eclipse,但我已经更新了我的答案,并引用了另一篇帖子。 - Serge Ballesta
我会尽快验证并接受 - 我认为你是对的,但我需要在我的电脑上证明它 - 谢谢你的帮助! - user3813256

1

2
最后一列显示可选项为是。 - Davideas

-1

我认为你的第一个pom.xml是正确的(依赖项是正确的),也许配置文件位置不对。

pom.xml

      <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.25</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>2.7</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.7</version>
    </dependency>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接