我使用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)
我想知道地球上的这一切都应该是什么意思?
你能帮助吗?
你最有可能缺少一个依赖项。 这是很容易重现的,如果你只在你的类路径中包括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>
对我来说,以下工作(更新:现在同你的原始张贴,但显示的是进口)
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.
我避免在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下的罐子和一个依赖于另一个项目中引用。 使所有引用指向同一个罐子解决了我的情况下这个问题。