3

我正在尝试在 Eclipse 项目中使用 log4j.2.x 进行日志记录。我的名为 log4j2.xml 的 conf 文件直接位于 java 项目下,并且我在类路径中有必要的 jar。当我测试时,我看到以下错误消息。谁能告诉我这个问题的解决方案?log4j2.xml:

<?xml version="1.0" encoding="UTF-8"?> <configuration status="WARN">  <appenders>
<Console name="Console" target="SYSTEM_OUT">
  <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>  </appenders>  <loggers>
<root level="error">
  <appender-ref ref="Console"/>
</root>  </loggers></configuration>

控制台中的错误:

Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/ILoggerFactory
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:791)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:186)
at org.apache.logging.slf4j.SLF4JLoggerContextFactory.<init>(SLF4JLoggerContextFactory.java:34)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
at java.lang.Class.newInstance0(Class.java:372)
at java.lang.Class.newInstance(Class.java:325)
at org.apache.logging.log4j.LogManager.<clinit>(LogManager.java:84)
at Browserbot.<clinit>(Browserbot.java:17)Caused by: java.lang.ClassNotFoundException: org.slf4j.ILoggerFactory
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356) ... 23 more

我的 Java 文件:

public class Browserbot {
static Logger logger = LogManager.getLogger(Browserbot.class.getName());

public static void main(String[] args){

    logger.error("File Not Found");}}       
4

6 回答 6

9

slf4j.jar运行程序时,您的类路径中丢失了。要了解 slf4j 和 log4j 之间的依赖关系,下载 jar 等,请点击以下链接:

http://www.slf4j.org

于 2013-08-24T17:14:22.700 回答
2

我使用以下内容:

slf4j-api-1.7.5.jar
slf4j-ext-1.7.5.jar
log4j-slf4j-impl-2.0-beta9.jar
log4j-core-2.0-beta9.jar
log4j-api-2.0-beta9.jar
于 2014-02-17T04:32:26.010 回答
2

停止添加额外的 jar 文件。事实上只有两个必需的罐子 1. log4japi.jar 2. log4j-core.jar

这解决了问题

于 2015-10-02T16:04:00.027 回答
0

仅包含相关的 log4j jar 文件(版本 2。),这将解决此错误。在我的情况下,对于 log4j 上提到的相同错误,我删除了所有 log4j jar 文件,除了:“log4j-api-2.0-beta9.jar”和“log4j-core-2.0-beta9.jar”,这已经解决了问题并按预期工作。错误没有提供信息,我最终下载了许多其他 jar 文件,但这当然不起作用。只包括相关的罐子应该可以解决这个问题。

于 2013-10-20T15:40:12.580 回答
0

此修复程序特定于 Web 应用程序:

我在关机期间遇到了与 NoClassDefFoundError 类似的问题。除了 mojo 列出的 jar 文件之外,我还必须包含 log4j-web-xx.jar 并解决了问题。

可以在这里找到解释:http: //logging.apache.org/log4j/2.x/manual/webapp.html

于 2015-02-04T23:42:07.603 回答
0

这可能是因为您的类路径未正确添加!确保在类路径中使用正确的 log4j jar。您使用的是哪个版本?我正在使用 log4j-1.2.15,它工作正常!

于 2013-10-15T07:59:46.640 回答