我正试图用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
我查了一下,班级org.apache.log4j。级别是在我的项目下"Maven依赖
我已经尝试了以下选项:
这些选项都不起作用:(
这是我的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>
此外,我注意到当添加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");
}
}
还有我的log4j。特性:
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
有人能告诉我我做错了什么吗?我已经尝试过在SO上搜索答案,但所有提到的答案都添加了log4j依赖项,我已经添加了。。。所以不确定,出了什么问题。
我和你犯了同样的错误。我根据以下两条建议解决了我的问题。我希望有帮助。
1.修改pom文件:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.2</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.2</version>
</dependency>
2.将jar添加到启动脚本中
java -cp ./lib/log-producer-1.0.4-SNAPSHOT.jar:./lib/slf4j-log4j12-1.7.2.jar:./lib/slf4j-api-1.7.2.jar:./lib/log4j-1.2.12.jar cn.tiakon.core.Bootstrap
如果从命令行运行mvn编译exec: java-D"exec.mainClass"=Sample道
,您仍然会出错吗?运行此命令后,我在命令行上看到以下内容,我的机器上有Maven 3.1.1和您的代码:
Hello
INFO [SampleDao.main()] (SampleDao.java:9) - Logged
所以,您的POM和代码似乎很好。您试图运行代码的方式似乎有问题。
还请注意,以下简化配置应起作用:
<dependencies>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.7</version>
</dependency>
</dependencies>
如果POM有其他依赖项将不同版本的Log4j添加到项目中,则必须指定特定版本的Log4j。
尝试这些依赖项
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.5</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>1.7.5</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.5</version>
<scope>runtime</scope>
</dependency>
主要内容:SLF4J 与 Log4j 的区别,为什么 SLF4J 优于 Log4J?SLF4J 与 Log4j 的区别 SLF4J(Simple Logging Façade for java)是一个 API,旨在提供对许多日志框架的通用访问,log4j 就是其中之一。 它基本上是一个抽象层。它不是日志记录实现。这意味着如果您正在编写一个库并且您使用 SLF4J,您可以将该库提供给其他人使用,他们可以选择与 SLF4J 一起使用的日志记录实现,例如 log4j 或 Java 日志
我得到了错误 在我的build.gradle文件中,我有以下一行包含jar log4j-SLF4j-impl-2.0-beta8.jar(我想将其绑定到LOG4J2)
我有一个用Maven构建的RESTJava应用程序。它由一个包含两个模块的项目组成: myapp_server(父项目) myapp_rest myapp_logging 这是父POM: 这是的POM(使用dropwizard中的java简单原型创建): 这是的 POM: 我想让所有日志都通过,以便使用进行日志记录。删除向导在内部使用日志,所以我试图让它使用slf4j。 如果我运行这个项目,我会得
希望是一个简单的问题,但我的google foo让我失望了--我有一个maven项目,我们在其中使用了SLF4J和Log4J1.2绑定。 我们现在想要转移到Log4J2,特别是为了提高性能--但是,我一辈子都找不到Log4J2.0绑定的maven依赖项。我在http://logging.apache.org/log4j/2.x/log4j-SLF4j-impl/上找到了一些注释,但没有提到任何依赖
问题内容: SLF4J的“ Hello World”示例对我不起作用。我猜这是因为我在类路径中添加了slf4j-log4。我应该直接配置log4j以便您好工作吗? 更新 :我添加了log4j初始化,但仍然无法正常工作: 我得到: 问题答案: 如果要使用,则需要在类路径中使用以下文件: slf4j-api-1.6.1.jar slf4j-simple-1.6.1.jar 如果要使用和,则需要在类路径
我收到了一个由另一个开发人员完成的项目(我现在无法与他取得联系)。在该项目中,slf4j用于日志记录。但是我在类路径中看到log4j-1.2.17.jar以及logback-access-1.0.9.jar、logback-classic-1.0.9.jar、logback-core-1.0.9.jar。此外,和文件都在参考资料中。现在我很困惑实际使用的是哪个实现。有人能提出什么建议吗? 类路径中