java - NPE 与 Perf4j 和 Log4j

标签 java log4j perf4j

同时使用 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>

我做错了什么?

最佳答案

我希望我能帮助刚遇到同样异常的人。所以这是我的答案:

所描述的异常似乎只是在少数情况下出现。 这是我的设置:

  • 开发网络应用
  • Tomcat 6.0.32
  • Log4j 1.2.15
  • Perf4j 0.9.16

此外,似乎只有在重新部署 Web 应用程序后才会出现异常。如果您刚刚重新启动 tomcat,则不会发生异常。

我为摆脱异常所做的工作:

  • 将 log4j 模式从 value="%d %-5p: %c - %m%n" 更改为 value="%d{yyyy-MM-dd HH:mm: ss} %-5p: %c - %m%n"
  • 将 Log4j 升级到版本 1.2.16

关于java - NPE 与 Perf4j 和 Log4j,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8518392/

相关文章:

java - 如何使用 JPA 和 Hibernate 使用映射为 ORDINAL 的枚举参数进行查询

java - 停止从依赖项向控制台显示记录器输出

java - Log4j 反射(reflect)配置文件的变化?

java - logback 不会将 perf4j 打印到日志文件

java - Perf4j 私有(private)方法的 @profiled 注释

java - 将文本写入具有图像背景的 JTextPane

java - 分隔符的正则表达式

java - 如何使用递归回溯 (Java) 找到特定迷宫的解决方案?

spring-boot - 如何在Spring Boot 2.0.5应用程序中启用HttpClient连线日志记录?

java - 如何从 perf4j 日志文件制作图表?