首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >无法将获取异常org.apache.logging.slf4j.SLF4JLoggerContext强制转换为org.apache.logging.log4j.core.LoggerContext

无法将获取异常org.apache.logging.slf4j.SLF4JLoggerContext强制转换为org.apache.logging.log4j.core.LoggerContext
EN

Stack Overflow用户
提问于 2014-09-17 21:19:30
回答 2查看 55.7K关注 0票数 34

我的代码使用apache-log4j-2.0.2非常简单:

代码语言:javascript
复制
import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.Logger;

public class Log4jtest {
  static Logger log =Logger.getLogger(Log4jtest.class);
  public static void main(String[] args) {
    BasicConfigurator.configure();
        log.debug("This is debug message");
  }

}

但我得到的异常如下:

代码语言:javascript
复制
Exception in thread "main" java.lang.ExceptionInInitializerError
Caused by: java.lang.ClassCastException: org.apache.logging.slf4j.SLF4JLoggerContext cannot be          cast to org.apache.logging.log4j.core.LoggerContext``
at org.apache.log4j.Logger.getLogger(Logger.java:41)
at Log4jtest.<clinit>(Log4jtest.java:11)

为什么异常来自一个简单的程序?

EN

回答 2

Stack Overflow用户

发布于 2014-09-17 23:19:16

从类路径中删除下面的jar,它应该会解决这个问题-

代码语言:javascript
复制
log4j-to-slf4j-2.0.2.jar
log4j-to-slf4j-2.0.2-sources.jar
log4j-slf4j-impl-2.0.2.jar
log4j-slf4j-impl-2.0.2-sources.jar

在从http://www.apache.org/dyn/closer.cgi/logging/log4j/2.0.2/apache-log4j-2.0.2-bin.zip下载apache-log4j-2.0.2之后,

我能够复制并修复该问题。

票数 74
EN

Stack Overflow用户

发布于 2018-03-24 06:15:49

我用的是Maven。我发现在<dependencies>列表的顶部声明我的log4j/slf4j依赖项(在Spring Boot之前,它使用logback)解决了这个问题。

要归功于@TheCodingFrog,在我的Spring Boot依赖项中添加排除项也解决了这个问题。如下所示:

代码语言:javascript
复制
<dependencies>
    <dependency>
        <groupId>...</groupId>
        <artifactId>...</artifactId>
        <exclusions>
            <exclusion>
                <groupId>log4j</groupId>
                <artifactId>*</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>*</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>*</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
</dependencies>

注意:如果你关心实际使用的是哪个日志框架,一个可能重要的区别是,在@的方法中,slf4j保留了logback作为绑定:

代码语言:javascript
复制
SLF4J: Actual binding is of type [ch.qos.logback.classic.util.ContextSelectorStaticBinder]

然而,在我使用的方法中,使用了slf4j/log4j

代码语言:javascript
复制
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]

如果有人感兴趣,我使用的log4j/slf4j依赖项是:

代码语言:javascript
复制
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.7</version>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.7.7</version>
</dependency>
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25891737

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档