我从具有log.info语句的简单代码行中得到以下错误
java.lang.NullPonterException
at java.io.Writer.write(Writer.java:157)
at org.apache.log4j.helpers.CountingQuietWriter.write(CountingQuietWriter.java:45)
at org.apache.log4j.WritingAppender.subAppend(WriterAppender.java:310)
at org.apache.log4j.RollingAppender.subAppend(RollingAppender.java:276)
at org.apache.log4j.WritingAppender.append(WriterAppender.java:162)
at org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:251)
at org.apache.log4j.helpers.AppenderAttachbleImpl.appendLoopOnAppenders(AppenderAttachbleImpl.java:66)
at org.apache.log4j.Category.callAppenders(Category.java:206)
at org.apache.log4j.Category.forcedLog(Category.java:391)
at org.apache.log4j.Category.info(Category.java:666)
at com.bizcase.Helper.showTip(Helper.java:32)
任何人都可以建议遇到此问题吗?
我正在使用log4j版本1.2.17和常规滚动附加程序。
它不是null对象的NullPonterException,它来自log4j库,超出了我的控制范围,无法确定是哪个log4j属性或代码导致了此问题。
答案 0 :(得分:1)
查看源代码 1 :
“ org.apache.log4j.helpers.CountingQuietWriter.write(CountingQuietWriter.java:45)”是对Writer.write(String)的调用。
Writer.write(String)仅在字符串为null时才能抛出NPE。
这意味着使用null
参数调用了CountingQuietWriter.write。
以此类推。 (您可以做剩下的!)
我想您会发现根本原因是org.apache.log4j.Category.info(...)
消息正在调用null
。
还要注意,Category
的javadoc指出:
绝对不需要新的客户端代码来使用或引用Category类。尽可能避免引用或使用它。
因此,如果com.bizcase.Helper
是您的 代码,则需要对其进行修改,两者,以修复NPE错误和以避免直接使用Category
。
如果不是您的代码,则需要找出空字符串在info
调用中的位置。我的猜测是这是缺少的工具提示……之类的。
1-我受此困扰,因为我不知道您使用的Java和log4j的确切版本,因此无法确定我是否拥有正确的源代码。而且我不知道com.bizcase.Helper
的来源是什么样。另一方面,您(作为开发人员)可以找到这些东西。