Java的:log4j的初始化错误(Java: log4j initialization error

2019-08-01 05:11发布

我使用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");

    }
}

当我尝试编译我得到这个错误:

例外在线程 “主” 显示java.lang.NullPointerException在org.apache.logging.log4j.LogManager.getLogger(LogManager.java:129)在my.package.logging.TestLogger.main(TestLogger.java:15)

我想知道地球上的这一切都应该是什么意思?

你能帮助吗?

Answer 1:

你最有可能缺少一个依赖项。 这是很容易重现的,如果你只在你的类路径中包括log4j-api-2.0-beta1.jar文件。

如果您下载的二进制分发 ,还包括log4j-core-2.0-beta1.jar classpath中。 如果你使用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>


Answer 2:

对我来说,以下工作(更新:现在同你的原始张贴,但显示的是进口)

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.


Answer 3:

我避免在log4j2罐子的类路径多个副本解决了这个问题。

在NPE在日志管理的129线发生。 (return语句= 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静态初始化块。

我的假设是,当有一个以上的日志管理的类路径初始化failes。

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



文章来源: Java: log4j initialization error