我是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)
我做错了什么?请帮忙。
答案 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的应用程序中加载,而是单独实例化...正如您声称的那样。