java- NoClassDefFoundERROR:LogManager

时间:2018-12-13 02:42:40

标签: java logging

我正在尝试编写一条简单的log4j2日志消息。

这是代码的样子:

package com.company;

import java.io.IOException;

import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;


public class Main {

   private static final Logger logger = LogManager.getLogger(Main.class);

    public static void main(String[] args) throws IOException {

        String message = "Hello there!";
        System.out.println(message);
        logger.info(message);

    }
}

还有导入API的外部库:

Screenshot

当我运行程序时,它会抛出一个:

 java.lang.NoClassDefFoundError: org/apache/logging/log4j/LogManager
 Caused by: java.lang.ClassNotFoundException: org.apache.logging.log4j.LogManager

我已经导入了相关的jar文件,但不明白为什么我仍然会收到此错误。

我做错了什么吗?

3 个答案:

答案 0 :(得分:1)

您没有在类路径中仅包含API桥log4j-api-2.11.1.jar,而不是实际的库log4j-1.2-api-2.11.1.jar。它将您的API 1调用转换为API 2调用。但是实际缺少处理调用的库。

将实际库添加到类路径中,或者删除桥并重写API调用(推荐),或者保留桥并保留API 1调用。

答案 1 :(得分:0)

尝试使用以下代码导入LogManager和Logger:

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

答案 2 :(得分:0)

您想使用log4j2,但是您将log4j用作导入。 要使您的项目正常工作,您必须做两件事:

  1. 按照@Huan Zhang的建议,添加进口商品
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
  1. 删除所有以log4j-1.x开头的jar。 (例如屏幕截图中的第一个jar)。我犯了同样的错误,因为当我下载log4j依赖包时,我不知道需要哪些文件,因此添加了所有文件。但是无论出于何种原因,现在激活了log4j 1而不是log4j 2。