Old*_*eon 14 java nullpointerexception
今天我正在浏览一些日志并遇到一个奇怪的错误.
以下是它在日志中的显示方式:
2014/09/11 15:23:52.801 [CC3A5FDD16035540B87F1B8C5E806588:<removed>] WARN a.b.c.Ddd - Main failure
java.lang.NullPointerException: null
2014/09/11 15:23:52.801 [CC3A5FDD16035540B87F1B8C5E806588:<removed>] ...
Run Code Online (Sandbox Code Playgroud)
这是代码的样子:
} catch (Exception e) {
Ddd.log.warn("Main failure ", e);
throw e;
}
Run Code Online (Sandbox Code Playgroud)
如果重要的话,代码在jsp中.在日志中再次重复相同的异常(正如您所期望的那样throw e).
我没有原因记录 - 日志中的前一行显示了查询的执行情况.这种情况在4天内发生了两次,似乎没有对系统造成任何伤害.
环境:使用Java 5在Tomcat下运行的相当繁忙的Web服务.
我不是在询问有关调试系统的提示 - 这些错误很久以后甚至不会再发生.关于如何在没有堆栈跟踪的情况下创建任何异常(特别是NPE),我感到很难过?
添加
正在使用的记录器是一个slf4j驱动Logback实例.我相信这个warn方法就在这里.不确定Logback解决了什么方法,但我确信Throwable参数是专门处理的,如果附加了堆栈跟踪Throwable,它将出现在日志中.
LogBack.xml - 根据要求:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property name="log.package" value="Package" />
<property name="log.pattern" value="%date{yyyy/MM/dd HH:mm:ss.SSS} [%X{session}:%X{device}] %level %logger{25} - %msg%n"/>
<property name="log.consolePattern" value="%highlight(%-5level) %white(%logger{25}) - %msg%n"/>
<if condition='isDefined("catalina.home")'>
<then>
<property name="log.dir" value="${catalina.home}/logs" />
</then>
<else>
<property name="log.dir" value="." />
</else>
</if>
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>DEBUG</level>
</filter>
<encoder>
<Pattern>${log.consolePattern}</Pattern>
</encoder>
</appender>
<appender name="rolling" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.dir}/${log.package}.log</file>
<encoder>
<Pattern>${log.pattern}</Pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log.dir}/${log.package}.%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!-- or whenever the file size reaches 16MB. -->
<maxFileSize>16MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!-- Keep no more than 3 months data. -->
<maxHistory>90</maxHistory>
<cleanHistoryOnStart>true</cleanHistoryOnStart>
</rollingPolicy>
</appender>
<!-- Default logging levels. -->
<root level="INFO">
<appender-ref ref="console"/>
<appender-ref ref="rolling"/>
</root>
<!-- Specific logging levels. -->
<!-- Generally set to INFO or ERROR but if you need more details, set to DEBUG. -->
<logger name="org.apache" level="INFO"/>
<logger name="net.sf.ehcache" level="ERROR"/>
<logger name="com.zaxxer" level="ERROR"/>
<logger name="ch.qos" level="ERROR"/>
</configuration>
Run Code Online (Sandbox Code Playgroud)
我手动编辑了日志中会话ID之后的值以删除客户数据.
ema*_*ren 14
有时候,特别是在NullPointers(根据我的经验)中,jvm可以优化异常的创建和转换,并且堆栈跟踪丢失(或者更准确,永远不会创建).我怀疑你的问题与某些java库无关,而是与jvm本身有关.
如果在启动jvm-process时添加此参数,那么如果我的怀疑是正确的话,您将获得堆栈跟踪.
-XX:-OmitStackTraceInFastThrow
Run Code Online (Sandbox Code Playgroud)
之前有人问过这个问题,请点击此处了解更多详情:
注意,这适用于sun/oracle jvm
| 归档时间: |
|
| 查看次数: |
5362 次 |
| 最近记录: |