在Spring Boot应用程序中使用log4j2进行日志记录

3

我正在尝试学习Spring Boot。但是我在处理日志记录器依赖时完全搞砸了。 我有一个简单的pom文件:

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- Logging -->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>2.3</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.3</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-slf4j-impl</artifactId>
            <version>2.3</version>
        </dependency>
    </dependencies>

我已经在..src\main\resources\中创建了log4j2.xml文件。

我使用以下方式进行日志记录:

private static final Logger LOG = LoggerFactory.getLogger(MyClass.class);
LOG.error("ERRRRRRR!!!!");

但是当应用程序启动时,我看到:

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/Users/me/.m2/repository/ch/qos/logback/logback-classic/1.1.3/logback-classic-1.1.3.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/Users/me/.m2/repository/org/apache/logging/log4j/log4j-slf4j-impl/2.3/log4j-slf4j-impl-2.3.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [ch.qos.logback.classic.util.ContextSelectorStaticBinder]

当然,log4j2及其配置也不起作用。
我知道这是一个很常见的问题。我查了很多答案,但对我来说都没有用。
2个回答

6

您需要排除spring-boot-starter-batch中捆绑的logback,然后使用spring-boot-starter-log4j2进行替换。请查看有关日志记录和Spring Boot的文档

这个pom配置对我很有效。

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-batch</artifactId>
        <version>${spring.boot.version}</version>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-logging</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-log4j2</artifactId>
        <version>${spring.boot.version}</version>
    </dependency>

3

您的类路径中有多个SLF4J绑定。

  • Logback经典版,这是Spring Boot默认包含的
  • 您想要使用的Log4j。

您需要在类路径中只有一个绑定,可以通过使用Maven依赖项排除来实现。


我现在不确定。我是新手,刚开始学习所有这些。谢谢,我会继续使用Logback。 - user3742622
对于这个,我在POM或其他方面无需做任何事情,Logback默认就存在,对吧? - user3742622
阅读logback文档以使用logback配置日志,并删除与log4j相关的依赖项。或者阅读Spring Boot日志记录文档。 - Toilal
2
Log4j已经过时,但他想要使用log4j2,据我所知它正在积极维护中。 - crea1

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