我用各种框架(jsf,Spring,Hibernate)编写了一个web应用程序,我的logger库是Logback和slf4j。
目前我无法在日志文件中显示未捕获的异常(例如NullPointers)。
这是我的logBack.xml
<configuration debug="true">
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${CATALINA_HOME}/logs/jsfDemo.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>jsfDemo.%d{yyyy-MM-dd}.log.zip</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{35} - %msg%n</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="FILE" />
</root>
</configuration>
当我用uc = null
执行这几行代码时public void nullPointerMethod(UserCredential uc){
LOG.debug(">>login(uc)");
if(uc == null){
throw new NullPointerException();
}else{
//do something
}
LOG.debug("<<login(uc)");
}
logFile中的我只看到
>>login(uc)
但我希望看到NullPointer的stackTrace。怎么了?
答案 0 :(得分:2)
您可以使用SLF4JBridgeHandler:
本质上,我们的想法是在根记录器上安装一个SLF4JBridgeHandler实例作为系统中唯一的JUL处理程序。随后,SLF4JBridgeHandler实例将重定向所有JUL日志记录重定向到基于SLF4J API的
基本上你只需要在main方法中调用 SLF4JBridgeHandler.install(); 并以这种方式配置logback:
<contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator">
<resetJUL>true</resetJUL>
</contextListener>