1

更新:这不仅适用于 AsyncAppender。也发生在控制台一上。

我遇到了 AsyncAppender 的奇怪行为,这种行为很少发生但危害很大。

这是代码片段:

public void testNPE() {
    try {
        try {
            throw new NullPointerException();
        } catch (NullPointerException e) {
            throw new RuntimeException(e);
        }
    } catch (RuntimeException e) {
        logger.error("Catcha!" + e.getLocalizedMessage(), e);
    }
}

可能的结果应该是:

07.12.12 10:21:34,904 ERROR [main] >> [com.ubs.eqdel.markitfeed.core.RetrieverTest:74]          Catcha! java.lang.NullPointerException
java.lang.RuntimeException: java.lang.NullPointerException
    at com.ubs.eqdel.markitfeed.core.RetrieverTest.testNPE(RetrieverTest.java:71)
...
Caused by: java.lang.NullPointerException
    at com.ubs.eqdel.markitfeed.core.RetrieverTest.testNPE(RetrieverTest.java:69)
    ... 25 more

但是对于 20 次尝试中的 5 次,我看到:

Exception in thread "Dispatcher-Thread-0" java.lang.NullPointerException
    at java.io.Writer.write(Writer.java:140)
    at org.apache.log4j.helpers.CountingQuietWriter.write(CountingQuietWriter.java:45)
    at org.apache.log4j.WriterAppender.subAppend(WriterAppender.java:309)
    at org.apache.log4j.RollingFileAppender.subAppend(RollingFileAppender.java:263)
    at org.apache.log4j.WriterAppender.append(WriterAppender.java:160)
    at org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:251)
    at org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:66)
    at org.apache.log4j.AsyncAppender$Dispatcher.run(AsyncAppender.java:583)
    at java.lang.T07.12.12 10:23:54,972 ERROR [main] >> [com.ubs.eqdel.markitfeed.core.RetrieverTest:74]  Catcha! java.lang.NullPointerException
java.lang.RuntimeException: java.lang.NullPointerException
at com.ubs.eqdel.markitfeed.core.RetrieverTest.testNPE(RetrieverTest.java:71)
...
Caused by: java.lang.NullPointerException
    at com.ubs.eqdel.markitfeed.core.RetrieverTest.testNPE(RetrieverTest.java:69)
    ... 25 more

AsyncAppender 有什么问题?有没有人面临同样的情况?解决方法是什么?

4

1 回答 1

2

看起来像这个错误

编辑:根据发行说明,1.2.16(2010-04-06 发布)应该包含对此的修复

于 2012-12-09T15:32:57.730 回答