簡體   English   中英

類別中的java log4j異常

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM