【问题标题】:Get Stack trace from HttpServletRequest in spring boot在 Spring Boot 中从 HttpServletRequest 获取堆栈跟踪
【发布时间】:2020-07-21 19:58:51
【问题描述】:

我目前正在运行一个 Spring Boot 应用程序。

我将这个网页上线供多人使用。然而,这是第一次启动它,我不确定我是否已经解决了所有的错误,所以我试图找到一种方法来提醒自己,当有事情发生时。

我在 Spring 中创建了一个自定义错误控制器。我希望它显示一个自定义错误页面,它只是简单地告诉用户出现问题并且我们已经意识到它。这部分已经开始工作了。

此外,我希望它向我发送一封包含堆栈跟踪信息的电子邮件。我希望通过电子邮件将默认错误控制器显示的同一页面发送给我。我正在使用 AWS SES。

这是我的代码示例。

@GetMapping("/error")
public String handleError(HttpServletRequest request) {
    Object status = request.getAttribute(RequestDispatcher.ERROR_STATUS_CODE);

    if (status != null) {
        int statusCode = Integer.parseInt(status.toString());

        if(statusCode == HttpStatus.NOT_FOUND.value()) {
            return "404";
        }
    }
    
    sesSender.sendErrorEmail("strack trace error");
    return "error";
}

我发现了5年前提供的以下问题Spring Boot Custom Error Page Stack Trace 我希望从那时起,他们就允许使用此功能。

【问题讨论】:

    标签: spring-boot error-handling stack-trace


    【解决方案1】:

    如果你使用 Spring Boot,你可以使用这个 bean 和这个方法 ExceptionUtils.getStackTrace()。您将需要导入 commons.lang 依赖项。 ExceptionUtils 中的方法将为您提供要发送到电子邮件的堆栈跟踪。但这仅适用于服务器端错误。如果您希望发送带有前端错误堆栈跟踪的电子邮件,您需要创建自己的 Dispatcher Servlet 并在 DoService 过滤器中处理它

    @Bean
    HandlerExceptionResolver errorHandler() {
        return (request, response, handler, ex) -> {
            Logger logger = LoggerFactory.getLogger(DispatcherServlet.class);
            ModelAndView model = new ModelAndView("error/error");
            model.addObject("exceptionType", ex);
            model.addObject("handlerMethod", handler);
    
            logger.error(ExceptionUtils.getMessage(ex));
            System.out.println("" +
                    "\n" + ExceptionUtils.getStackTrace(ex));
    
            try {
                Utility.sendStackTraceToDeveloper(ex, request, javaMailSender);
            } catch (MessagingException e) {
                e.printStackTrace();
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
            return model;
        };
    }
    

    【讨论】:

      猜你喜欢
      • 2010-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多