使用Log4j2

时间:2016-11-22 16:56:11

标签: java spring spring-mvc logging log4j2

我正在尝试配置Spring和Log4j2来记录带有堆栈跟踪到文件的异常。问题是默认配置只记录一行,例如:

2016-11-21 23:14:28 WARN  MvcLogger:189 - Resolved exception caused by Handler execution: java.lang.Exception: some message

此行由SimpleMappingExceptionResolver打印,如下所示:

@Bean
public SimpleMappingExceptionResolver createSimpleMappingExceptionResolver(){
    SimpleMappingExceptionResolver resolver = new SimpleMappingExceptionResolver();

    Properties mappings = new Properties();
    mappings.setProperty("Exception", "exception");

    resolver.setExceptionMappings(mappings);
    resolver.setDefaultErrorView("error");
    resolver.setWarnLogCategory("example.MvcLogger");
    return resolver;
}

所以我查看了SimpleHappingExceptionResolver超类的AbstractHandlerExceptionResolver的源代码,我发现了这个:

protected void logException(Exception ex, HttpServletRequest request) {
    if (this.warnLogger != null && this.warnLogger.isWarnEnabled()) {
        this.warnLogger.warn(buildLogMessage(ex, request));
    }
}

我意识到它无法在异常下打印堆栈跟踪。要解决此问题,我必须扩展SimpleMappingExceptionResolver并覆盖logException方法,但实际上没有更简单的方法来执行此操作吗?

这是我的log4j2.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
    <Appenders>
        <File name="File" fileName="${sys:catalina.home}/logs/money-manager/appLog.log">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n"/>
        </File>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %m%n"/>
        </Console>
    </Appenders>
    <Loggers>
        <Root level="INFO">
            <appenderRef ref="File"/>
        </Root>
        <Logger name="com.corriel" level="DEBUG" additivity="true">
            <appender-ref ref="File" level="DEBUG" />
        </Logger>
        <Logger name="org.hibernate.SQL" level="DEBUG">
            <AppenderRef ref="Console"/>
        </Logger>
        <Logger name="org.hibernate.type" level="TRACE">
            <AppenderRef ref="Console"/>
        </Logger>
    </Loggers>
</Configuration>

0 个答案:

没有答案