记录404s的最小Spring Boot Code

时间:2017-03-17 19:51:08

标签: java spring spring-boot

在我的Spring Boot应用程序中,我目前正在利用resources / public / error / 404.html自定义错误页面在无效URL上显示(自动)此404页面错误。

是否有一种简单的方法可以保留此自动功能,并为每个此类404添加简单的日志消息(包含无效的URL)?

理想情况下,尽可能少的代码我想要一些像:

//Some code
LOGGER.warn("Invalid URL " + request.url);
//Some more code

2 个答案:

答案 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);
  }
}