2011-12-31 33 views
1
类别

在我的测试应用程序,我发现了以下异常java的log4j的例外

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); 

有人可以帮助我解决这个... 。

感谢

+1

我们可以看到更多的堆栈跟踪吗?你使用的是JUL - > log4j桥吗? – artbristol 2011-12-31 10:11:46

回答

0

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

+0

谢谢......它的帮助很大 – siva 2012-01-06 10:40:21

0

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

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

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

+0

你确定吗?你跟踪了log4j的源代码吗?或者你只是猜测? – DiogoSantana 2013-03-28 02:10:50

+0

我100%确定我通过更改我使用的编译器的版本来修复自己的问题。我只是在推测我的解决方案是原始海报的正确解决方案。 – 2013-09-02 14:05:13

0

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

Logger.getLogger(null); 

当我到一些字符串或类问题得到解决改变looger名称:

Logger.getLogger(MyClass.class); 

Logger.getLogger("MyLoggerName");