NPE с Perf4j и Log4j

1

при использовании Perf4j вместе с Log4j я получаю следующее исключение:

log4j:ERROR Error occured while converting date.
java.lang.NullPointerException
at java.lang.System.arraycopy(Native Method)
at java.lang.AbstractStringBuilder.getChars(AbstractStringBuilder.java:328)
at java.lang.StringBuffer.getChars(StringBuffer.java:201)
at org.apache.log4j.helpers.ISO8601DateFormat.format(ISO8601DateFormat.java:130)
at java.text.DateFormat.format(DateFormat.java:316)
at org.apache.log4j.helpers.PatternParser$DatePatternConverter.convert(PatternParser.java:444)
at org.apache.log4j.helpers.PatternConverter.format(PatternConverter.java:65)
at org.apache.log4j.PatternLayout.format(PatternLayout.java:502)
at org.apache.log4j.WriterAppender.subAppend(WriterAppender.java:302)
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.perf4j.log4j.AsyncCoalescingStatisticsAppender$1.handle(AsyncCoalescingStatisticsAppender.java:200)
at org.perf4j.helpers.GenericAsyncCoalescingStatisticsAppender$Dispatcher.run(GenericAsyncCoalescingStatisticsAppender.java:316)
at java.lang.Thread.run(Thread.java:662)

Мой log4j.xml выглядит следующим образом:

<!-- Appenders -->
<appender name="console" class="org.apache.log4j.ConsoleAppender">
    <param name="Target" value="System.out" />
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d %-5p: %c - %m%n" />
    </layout>
</appender>

<!-- Perf4j Appender -->
<appender name="CoalescingStatistics"
          class="org.perf4j.log4j.AsyncCoalescingStatisticsAppender">
    <param name="TimeSlice" value="10000"/>
    <appender-ref ref="fileAppender"/>
</appender>

<!-- This file appender is used to output aggregated performance statistics -->
<appender name="fileAppender" class="org.apache.log4j.FileAppender">
    <param name="File" value="perfStats.log"/>
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%m%n"/>
    </layout>
</appender>

<!-- Perf4j Loggers -->
<logger name="org.perf4j.TimingLogger" additivity="false">
    <level value="INFO"/>
    <appender-ref ref="CoalescingStatistics"/>
</logger>

Что я делаю неправильно?

  • 1
    Похоже, что это повторяющийся вопрос, см. Stackoverflow.com/questions/7620886/… для некоторых указателей.
  • 0
    @JBert спасибо, что показали мне этот вопрос. Это мне очень помогло.
Теги:
log4j
perf4j

1 ответ

3
Лучший ответ

Надеюсь, я смогу помочь кому-то, кто просто столкнулся с тем же исключением. Итак, вот мой ответ:

Кажется, что описанное исключение появляется только при нескольких обстоятельствах. Вот моя настройка:

  • Разработка веб-приложения
  • Tomcat 6.0.32
  • Log4j 1.2.15
  • Perf4j 0.9.16

Кроме того, похоже, что исключение возникает только после повторного развертывания веб-приложения. Исключение НЕ происходит, если вы только что запустили tomcat.

Что я сделал, чтобы избавиться от исключения:

  • Изменен шаблон log4j от value="%d %-5p: %c - %m%n" до value="%d{yyyy-MM-dd HH:mm:ss} %-5p: %c - %m%n"
  • Обновлен Log4j до версии 1.2.16

Ещё вопросы

Сообщество Overcoder
Наверх
Меню