我想通过log back捕获未捕获的异常,以涵盖以下情况:
@Controller
@RequestMapping("/dev")
public class DevController {
private static final Logger log = LoggerFactory.getLogger(DevController.class);
@ResponseBody
@RequestMapping(value = "/crash", method = RequestMethod.GET)
public String crash() {
int i = 1/0;
return "CRASH FINISHED " + i;
}
}
我当前的回溯配置是:
<configuration debug="true">
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} %-5level %logger{50}:%L - %msg%n</pattern>
</encoder>
</appender>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>/tmp/startgate.log</file>
<append>true</append>
<encoder>
<pattern>%d{HH:mm:ss.SSS} %-5level %logger{50}:%L - %msg%n</pattern>
</encoder>
</appender>
<appender name="EMAIL" class="ch.qos.logback.classic.net.SMTPAppender">
<smtpHost>localhost</smtpHost>
<to>randomemail@randomdomain.com</to>
<from>randomemail@randomdomain.com</from>
<subject>LIVE ERROR: %logger{20} - %m</subject>
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%date %-5level %logger{35} - %message%n</pattern>
</layout>
</appender>
<if condition='property("ENVIRONMENT").contains("DEVELOPMENT")'>
<then>
<root level="INFO">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
</root>
</then>
</if>
<if condition='property("ENVIRONMENT").contains("PRODUCTION")'>
<then>
<root level="ERROR">
<appender-ref ref="EMAIL" />
</root>
</then>
</if>
</configuration>
我如何能够捕获未捕获的错误?
修改 我个人有兴趣通过电子邮件发送此类错误。显然,最好的方法是使用全局异常处理程序。这里有一个教程:http://spring.io/blog/2013/11/01/exception-handling-in-spring-mvc