1

我是使用 log4j 包的新手,我没有看到错误:这是一个非常简单明了的代码示例:

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

public class TestLogger {

    private static Logger logger;

    public static void main(String[] args) {

        logger = LogManager.getLogger(TestLogger.class);
        logger.info("Hello");

    }
}

当我尝试编译时,出现此错误:

在 my.package.logging.TestLogger.main(TestLogger.java:15) 的 org.apache.logging.log4j.LogManager.getLogger(LogManager.java:129) 的线程“main”java.lang.NullPointerException 中的异常

我想知道这到底是什么意思...

你能在这里帮忙吗?

4

3 回答 3

3

我通过避免 log4j2 jar 的类路径上的多个副本解决了这个问题。

NPE 发生在 LogManager 的第 129 行。(返回语句 = 第 129 行)

/**
 * Return a Logger with the specified name.
 *
 * @param name The logger name.
 * @return The Logger.
 */
public static Logger getLogger(String name) {

    return factory.getContext(LogManager.class.getName(), null, false).getLogger(name);
}

问题似乎是,工厂 (LoggerContextFactory) 为 null = 未初始化。初始化发生在类 LogManager 的静态初始化块中。

我的假设是,当类路径上有多个 LogManager 时,初始化会失败。

在我的项目(使用 Eclipse 开发的 Web 应用程序)中,我的 WEB-INF/lib 中有 jar,并被另一个项目的依赖项引用。在我的情况下,使所有引用都指向相同的罐子解决了这个问题。

于 2012-10-14T00:45:18.837 回答
1

您很可能缺少其中一个依赖项。如果您只在类路径中包含该log4j-api-2.0-beta1.jar文件,这很容易重现。

如果您下载了二进制发行版,请log4j-core-2.0-beta1.jar在您的类路径中也包含 。如果您使用 Maven,请将其放入您的pom.xml

  <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>2.0-beta1</version>
  </dependency>
  <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.0-beta1</version>
  </dependency>
于 2012-10-06T23:15:08.743 回答
1

以下对我有用(更新:现在与您的原始帖子相同,但显示导入)

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

public class TestLogger
{
    private static Logger logger;

    public static void main(String[] args) {
        logger = LogManager.getLogger(TestLogger.class);
        logger.info("Hello");
    }
}

前提是您已经创建了 log4j 配置,否则您将收到可怕的错误:

log4j:WARN No appenders could be found for logger (TestLogger).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
于 2012-10-06T22:20:15.583 回答