Java 使用Log4j2在springmvc中记录异常
我正在尝试配置Spring和Log4j2来记录异常,并将堆栈跟踪记录到文件中。问题是默认配置日志只有一行,例如: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
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。