use*_*466 24 java log4j exception
使用apache-log4j-2.0.2我的代码非常简单:
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");
}
}
Run Code Online (Sandbox Code Playgroud)
但我得到的例外是:
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)
Run Code Online (Sandbox Code Playgroud)
为什么异常来自一个简单的程序?
The*_*rog 64
从类路径中删除jar的下方,它应该解决问题 -
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
Run Code Online (Sandbox Code Playgroud)
从http://www.apache.org/dyn/closer.cgi/logging/log4j/2.0.2/apache-log4j-2.0.2下载apache-log4j-2.0.2后,我能够复制并解决问题 . -bin.zip.
我正在使用 Maven。我发现在列表顶部声明我的log4j
/slf4j
依赖项<dependencies>
(在 Spring Boot 之前,使用logback
)解决了这个问题。
对于@TheCodingFrog 的功劳,将排除项添加到我的 Spring Boot 依赖项也解决了这个问题。像这样:
<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>
Run Code Online (Sandbox Code Playgroud)
注意:如果您关心实际使用哪个日志记录框架,一个可能重要的区别是使用@TheCodingFrog 的方法,slf4j
保留logback
为绑定:
SLF4J: Actual binding is of type [ch.qos.logback.classic.util.ContextSelectorStaticBinder]
Run Code Online (Sandbox Code Playgroud)
而使用我使用的方法,slf4j
/log4j
被使用:
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
Run Code Online (Sandbox Code Playgroud)
如果有人感兴趣,我使用的log4j
/slf4j
依赖项是:
<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>
Run Code Online (Sandbox Code Playgroud)