Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Log4j2在springmvc中记录异常_Java_Spring_Spring Mvc_Logging_Log4j2 - Fatal编程技术网

Java 使用Log4j2在springmvc中记录异常

Java 使用Log4j2在springmvc中记录异常,java,spring,spring-mvc,logging,log4j2,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 SimpleMapping

我正在尝试配置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;
}
因此,我研究了AbstractHandlerExceptionResolver的源代码,它是SimpleMappingExceptionResolver的超类,我发现:

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>


您可以共享log4j配置文件吗?好的,我在问题中添加了log4j2.xml。您可以在代码中给出生成输出的行吗?这只是对log4j配置的测试:
@RequestMapping(value=“/categoryToExpense”,method=RequestMethod.GET)public Map categoryToExpense()引发异常{引发新异常(“some message”);
似乎没有更简单的解决方案:(.您已经说过一种方法。另一种方法可以是编辑AbstractHandlerExceptionResolver类并自己构建api。您可以共享log4j配置文件吗?好的,我在问题中添加了log4j2.xml。您可以在代码中给出生成输出的行吗?这只是对log4j配置的测试:
@RequestMapping(value=)/categoryToExpense”,method=RequestMethod.GET)public Map categoryToExpense()抛出异常{抛出新异常(“某些消息”);
似乎没有更简单的解决方案:(.您已经说过一种方法。另一种方法可以是编辑AbstractHandlerExceptionResolver类并自行构建api。