使用log4j2实现的Slf4j异常

5
我在将slf4j置于log4j 2之上时收到以下消息。尽管我已将log4J2配置为我的slf4j接口实现,但仍然看到“未找到SLF4J提供程序”的消息。不确定我错过了什么。
日志中的错误。
01-10-2022 19:22:46,115 ERROR [stderr] (MSC service thread 1-5) SLF4J: No SLF4J providers were found.
01-10-2022 19:22:46,115 ERROR [stderr] (MSC service thread 1-5) SLF4J: Defaulting to no-operation (NOP) logger implementation
01-10-2022 19:22:46,115 ERROR [stderr] (MSC service thread 1-5) SLF4J: See http://www.slf4j.org/codes.html#noProviders for further details.
01-10-2022 19:22:46,115 ERROR [stderr] (MSC service thread 1-5) SLF4J: Class path contains SLF4J bindings targeting slf4j-api versions prior to 1.8.
01-10-2022 19:22:46,116 ERROR [stderr] (MSC service thread 1-5) SLF4J: Ignoring binding found at [vfs:/content/abc.war/WEB-INF/lib/log4j-slf4j-impl-2.17.0.jar/org/slf4j/impl/StaticLoggerBinder.class]
01-10-2022 19:22:46,116 ERROR [stderr] (MSC service thread 1-5) SLF4J: See http://www.slf4j.org/codes.html#ignoredBindings for an explanation.

属性文件

log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.File=/sasa.log
log4j.appender.file.Append=true
log4j.appender.file.MaxFileSize=100MB
log4j.appender.file.MaxBackupIndex=5
log4j.appender.file.DatePattern='.'yyyy-MM-dd'.log'
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d %-5p [%t] %-17c{2} (%13F:%L) %3x - %m%n

Java文件

导入org.slf4j.Logger; import org.slf4j.LoggerFactory;

@Component
public class ABC{
    
    private static final Logger log = LoggerFactory.getLogger(abc.class);
    
    public String getCall(String url) throws Exception {
        try {
            log.info("getCall url - " + url );
            response = new String(get.getResponseBody(), UTFSTR);
            log.info(": Response code:"+response);
        } catch (Exception e) {
            log.error(" getCall - EXCEPTION - " + e.getLocalizedMessage());
            throw e;
        } 
        return response;
    } 
}

pom文件已配置。

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.5.2</version>
    <properties>
        <java.version>1.8</java.version>
        <slf4j.version>2.0.0-alpha5</slf4j.version>
        <log4j2.version>2.17.0</log4j2.version>
    </properties>
    
    <dependencies>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-slf4j-impl</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-batch</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-tomcat</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>logback-classic</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>logback-classic</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies> 
3个回答

8

针对Log4j 2.x,有两个不同的SLF4J绑定。由于你想使用SLF4J 1.8+,你导入了错误的绑定。请使用以下绑定:

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-slf4j18-impl</artifactId>
</dependency>

替代:

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

编辑:自Log4j2 2.19.0版本起,仅支持1.8.x beta分支的log4j-slf4j18-impl绑定已被替换为支持2.x SLF4J分支的log4j-slf4j2-impl

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-slf4j2-impl</artifactId>
</dependency>

备注:您提出的Log4j配置适用于Log4j 1.2。它不能与Log4j 2.x和Spring Boot一起使用。


谢谢!但是当我配置这个时...我得到了这个错误... INFO [org.hibernate.validator.internal.util.Version] (MSC service thread 1-6) HV000001: Hibernate Validator 6.0.22.Final ERROR [stderr]版本检查期间发生意外问题 ERROR [stderr]报告的异常: ERROR [stderr]java.lang.AbstractMethodError:接收器类org.apache.logging.slf4j.SLF4JServiceProvider未定义或继承接口org.slf4j.spi.SLF4JServiceProvider的已解决方法'abstract java.lang.String getRequestedApiVersion()'。 - teju c
请查看此问题 - Piotr P. Karwasz

1

Spring Boot 3版本的org.springframework.boot:spring-boot-starter-log4j2会引入log4j-slf4j2-impl,但是Spring Boot 2版本的org.springframework.boot:spring-boot-starter-log4j2则会引入log4j-slf4j-impl。在使用slf4j 2.0.x和log4j 2.19.0的情况下,Gradle for Spring Boot 2.7.6必须这样做:

implementation('org.springframework.boot:spring-boot-starter-log4j2') {
    exclude group: 'org.apache.logging.log4j', module: 'log4j-slf4j-impl'
}
implementation 'org.apache.logging.log4j:log4j-slf4j2-impl:2.19.0'

1

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