Pat*_*Pat 7 java logging log4j slf4j maven
我正在尝试用slf4j + log4j设置一个项目,但该死的东西只是不起作用......我一直得到例外:
Failed to instantiate SLF4J LoggerFactory
Reported exception:
java.lang.NoClassDefFoundError: org/apache/log4j/Level
at org.slf4j.LoggerFactory.bind(LoggerFactory.java:129)
at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:108)
at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:302)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:276)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:288)
at TestLog.main(TestLog.java:9)
Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Level
at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 6 more
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/log4j/Level
at org.slf4j.LoggerFactory.bind(LoggerFactory.java:129)
at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:108)
at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:302)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:276)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:288)
at TestLog.main(TestLog.java:9)
Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Level
at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 6 more
Run Code Online (Sandbox Code Playgroud)
我检查了类org.apache.log4j.Level在我的项目"Maven Dependencies> log4j-1.2.17.jar"下面.那么为什么VM找不到呢?
我已经尝试了以下选项:
没有选项工作:(
这是我的currnet pom.xml:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.sample</groupId>
<artifactId>DBUnitSample</artifactId>
<version>1.0</version>
<dependencies>
<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>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
</project>
Run Code Online (Sandbox Code Playgroud)
另外,我注意到,增加SLF4J-log4j12时,在树中添加的log4j作为依赖一样,所以我猜测,这里明确加入log4j的是多余的,但我无论如何添加它.仍然没有运气.
我的主要代码非常简单:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class SampleDao {
private static final Logger log = LoggerFactory.getLogger(SampleDao.class);
public static void main(String[] args) {
System.out.println("Hello");
log.info("Logged");
}
}
Run Code Online (Sandbox Code Playgroud)
我的log4j.properties:
log4j.rootLogger=DEBUG, STDOUT
log4j.logger.deng=INFO
log4j.appender.STDOUT=org.apache.log4j.ConsoleAppender
log4j.appender.STDOUT.layout=org.apache.log4j.PatternLayout
log4j.appender.STDOUT.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n
Run Code Online (Sandbox Code Playgroud)
有人可以告诉我,我做错了什么?我已经尝试在SO上搜索答案,但所有提到的答案都添加了log4j依赖项,我已经添加了......所以不确定,什么是错的.
编辑:这是我的整个项目结构.我是R-click SampleDao并将其作为Java应用程序运行.(我现在也删除了dbunit依赖,在slf4j问题上为零)

mvn compile exec:java -D"exec.mainClass"=SampleDao如果从命令行运行,还会出现该错误吗?运行此命令后,我在命令行上看到以下内容,在我的机器和您的代码上使用 Maven 3.1.1:
Hello
INFO [SampleDao.main()] (SampleDao.java:9) - Logged
Run Code Online (Sandbox Code Playgroud)
所以,你的 POM 和代码看起来没问题。您尝试运行代码的方式似乎有问题。
另请注意,以下简化配置应该有效:
<dependencies>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.7</version>
</dependency>
</dependencies>
Run Code Online (Sandbox Code Playgroud)
如果 POM 具有将不同版本的 Log4j 添加到项目的其他依赖项,则必须指定 Log4j 的特定版本。
| 归档时间: |
|
| 查看次数: |
16574 次 |
| 最近记录: |