Logger4j抛出ExceptionInInitializerError

时间:2014-10-19 10:30:55

标签: java log4j

我是Log4j的新手。我对Java很有经验。

我写了一个小例子来运行Log4j应用。

package com.log;



import org.apache.log4j.Logger;



public class Log4jExample {

    static Logger log = Logger.getLogger(Log4jExample.class.getName());



    public static void main(String[] args) {

        log.debug("Hello, this is a debug message.");
        log.info("Hello, this is an info message.");
    }
}

这是我在log4j.properties目录中手动创建的$JAVA_HOME/jre/lib/ext/文件。

# Define the root logger with appender X
log = /Users/aditya/Desktop/log4j
log4j.rootLogger = DEBUG, FILE

# Set the appender named X to be a File appender
log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.File=${log}/log.out

# Define the layout for X appender
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.conversionPattern=%m%n  

我在Mac OS X上。

我正在运行代码:

javac com/log/Log4jExample.java
java com.log.Log4jExample  

但这就是我得到的。

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:37)
    at com.log.Log4jExample.<clinit>(Log4jExample.java:13)  

我做错了什么?请帮忙。

1 个答案:

答案 0 :(得分:1)

问题是您已将不适当的日志记录JAR文件添加到Java安装$JAVA_HOME/jre/lib/ext/

  • 不要将第三方JAR文件添加到&#34; ext&#34;目录,因为它影响使用该Java安装运行的所有应用程序。 (并且很有可能这些JAR中的某些JAR不适合您的所有应用程序;例如版本不匹配等。)

  • 不要只是在ZIP文件中添加所有日志记录JAR文件。您下载的网页上的说明表明您只需要其中的两个...而不是所有15个JAR文件。


问题似乎是由一个JAR文件引起的,该文件旨在使log4j适应sl4fj日志记录外观。类org.apache.logging.slf4j.SLF4JLoggerContext不应该在使用没有外观的log4j的应用程序中加载,而是单独实例化...正如您声称的那样。