[英]java log4j exception in Category
在我的測試應用程序中,出現以下異常
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);
有人可以幫助我解決這個問題嗎?
謝謝
我相信我可能對此有答案。 當我重新編譯舊的應用程序時,我偶然發現了同樣的堆棧跟蹤信息。 我無意間使用Java 1.6來編譯最初基於Java 1.4構建的應用程序。 然后,我將它與log4j-1.2.8一起部署在運行Java 1.4虛擬機的weblogic 8容器中。 因此,我的Web應用程序(在1.6版的javac下編譯)被放到了weblogic中,然后單擊了deploy按鈕。 砰! 與此處顯示的堆棧跟蹤相同。
最終我想到這可能是一個跨版本的問題。 盡我所知,Java 1.4 VM加載了我的較新類並嘗試對其進行初始化。 當我的較新類動態鏈接到較舊的log4j庫時,class.getName分辨率中的某些內容無法返回有效字符串,並且將null傳遞給Logger類而不是有效字符串。
我通過強制構建腳本使用Java 1.4編譯器來解決問題。
當我的記錄器名稱為null時,我遇到了同樣的異常:
Logger.getLogger(null);
當我將looger名稱更改為某些字符串或類時,問題已解決:
Logger.getLogger(MyClass.class);
要么
Logger.getLogger("MyLoggerName");
奇怪的是,我進行了一些搜索,發現NPE是由空的Category名稱引起的,但是當您指定Logger.getLogger(Test.class)
您應該不會Logger.getLogger(Test.class)
這個問題。 我建議獲取log4j源並對其進行調試。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.