无法使用Logback记录未捕获的异常

时间:2014-04-23 14:01:48

标签: logback uncaught-exception

我用各种框架(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。怎么了?

1 个答案:

答案 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>