在我的Spring Boot应用程序中,我目前正在利用resources / public / error / 404.html自定义错误页面在无效URL上显示(自动)此404页面错误。
是否有一种简单的方法可以保留此自动功能,并为每个此类404添加简单的日志消息(包含无效的URL)?
理想情况下,尽可能少的代码我想要一些像:
//Some code
LOGGER.warn("Invalid URL " + request.url);
//Some more code
答案 0 :(得分:5)
您需要定义自定义ErrorViewResolver:
@Component
public class MyErrorViewResolver implements ErrorViewResolver {
@Override
public ModelAndView resolveErrorView(HttpServletRequest request, HttpStatus status, Map<String, Object> model) {
if (HttpStatus.NOT_FOUND == status) {
LoggerFactory.getLogger(this.getClass()).error("error 404 for url " + model.get("path"));
return new ModelAndView("error404", model);
}
else {
return new ModelAndView("error", model);
}
}
}
这个MyErrorViewResolver将在BasicErrorController类中自动调用。
对于404错误,将显示视图“error404”。
对于其他错误,将显示视图“错误”。
视图必须位于“templates”文件夹中(resources / templates / error404.html)。
答案 1 :(得分:2)
添加NotFoundException处理程序。
public class BaseController {
// Logger declaration
@ExceptionHandler(NotFoundException.class)
@ResponseStatus(value = HttpStatus.NOT_FOUND)
@ResponseBody
public ErrorResponse handleNotFoundError(HttpServletRequest req, NotFoundException exception) {
List<Error> errors = Lists.newArrayList();
errors.add(new Error(String.valueOf(exception.getCode()), exception.getMessage()));
log.error(exception);
return new ErrorResponse(errors);
}
}