类别中的java log4j异常

时间:2011-12-31 09:37:29

标签: java log4j nullpointerexception

在我的测试应用程序中,我得到以下异常

java.lang.NullPointerException
at org.apache.log4j.CategoryKey.<init>(CategoryKey.java:20)
at org.apache.log4j.Hierarchy.getLogger(Hierarchy.java:252)
at org.apache.log4j.Hierarchy.getLogger(Hierarchy.java:233)
at org.apache.log4j.LogManager.getLogger(LogManager.java:179)
at org.apache.log4j.Category.getInstance(Category.java:514)

即使我正在使用

static final Logger logger1 = Logger.getLogger(Test.class);

有人可以帮我解决这个问题....

由于

3 个答案:

答案 0 :(得分:0)

奇怪,我做了一些搜索,NPE是由一个空的类别名称引起的,但是当你指定一个Logger.getLogger(Test.class)时,你不应该有这个问题。我建议获取log4j源并进行调试。

答案 1 :(得分:0)

我相信我可以得到答案。最近,当我重新编译旧的应用程序时,我偶然发现了这个相同的堆栈跟踪。我无意中使用Java 1.6来编译最初在Java 1.4上构建的应用程序。然后我将它与log4j-1.2.8一起部署在运行Java 1.4虚拟机的weblogic 8容器中。所以我的网络应用程序,从1.6的javac编译下来到weblogic,我点击了部署按钮。砰!获得与此处所示相同的堆栈跟踪。

我终于想到它可能是一个跨版本的问题。我可以说,Java 1.4 VM加载了我的新类并尝试初始化它。当我的新类动态链接到较旧的log4j库时,class.getName解析中的某些内容无法返回有效字符串,并且null被传递给Logger类而不是有效字符串。

我通过强制构建脚本使用java 1.4编译器修复了我的问题。

答案 2 :(得分:0)

当我的记录器名称为null时,我得到了同样的异常:

Logger.getLogger(null);

当我将looger名称更改为某个字符串或类时,问题已解决:

Logger.getLogger(MyClass.class);

Logger.getLogger("MyLoggerName");