欢迎光临散文网 会员登陆 & 注册

【Java项目】Spring-全局异常+钉钉推送(实现生产问题监控)

2023-06-17 16:24 作者:美丽的程序人生  | 我要投稿

【Java项目】Spring-全局异常+钉钉推送(实现生产问题监控)

概述

生产环境的线上问题,通常出现时都比较紧急,由于开发人员不能直接debug生产环境,通常处理起来不是很容易。因此,生产环境出问题时,如果能够将报错的接口和参数,推送到钉钉群,就可以帮助技术人员快速排查生产问题,避免对业务影响,出现生产事故。

这里结合Spring 全局异常和钉钉推送,介绍如何实现生产问题监控。

全局异常

Spring全局异常主要使用@ControllerAdvice 注解和@ExceptionHandler注解

@ControllerAdvice

该注解作用是给Controller控制器添加统一的操作或处理,结合@ExceptionHandler用于全局异常的处理,也可以使用@RestControllerAdvice以文本返回到浏览器,实际中该注解还有很多用途,这里不做深究,感兴趣可以下来了解;

@ExceptionHandler
  • 用来统一处理方法抛出的异常;
  • +ExceptionHandler注解中可以添加参数,参数是某个异常类的class,代表这个方法专门处理该类异常;
 @ExceptionHandler(NumberFormatException.class)
 public String handleExeption(Exception ex) {
  System.out.println("抛异常了:" + ex);
  ex.printStackTrace();
  String resultStr = "异常:NumberFormatException";
  return resultStr;
 }

此时注解的参数是NumberFormatException.class,表示只有方法抛出NumberFormatException时,才会调用该方法。

  • 如果是通过try catch处理了异常,将不会进入到全局异常处理类,必须是通过运行时抛出的异常或者是通过throw new 加对应的异常,才会进入@ExceptionHandler 拦截。
配置过滤器

过滤器的作用,就是把httpServeletRequest包装成ContentCachingRequestWrapper类型继续往下传。

 @Component
 public class RequestCachingFilter extends OncePerRequestFilter {
  @Override
  protected void doFilterInternal(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, FilterChain filterChain) throws ServletException, IOException {
    filterChain.doFilter(new ContentCachingRequestWrapper(httpServletRequest), httpServletResponse);
  }
 }

第二步就是在使用的使用用方法getContentAsByteArray获取入参值:

 if(req != null && req instanceof ContentCachingRequestWrapper){
        ContentCachingRequestWrapper wrapper =(ContentCachingRequestWrapper) req;
        log.error("request_body:{}", StringUtils.toEncodedString(wrapper.getContentAsByteArray(), Charset.forName(wrapper.getCharacterEncoding()))
        );
      }

这样你就获取到来自客户端请求的入参。注意inputStream只能读一次流就会被关闭,不会再被读取,所以如果在序列化等过程中读过一次inputStream,之后就不要尝试自己再读,会抛异常,无法读取数据。

参考: https://blog.csdn.net/weixin_41953346/article/details/127882004

钉钉群消息推送

详细的钉钉推送API可以参考地址:https://open.dingtalk.com/document/orgapp/custom-robot-access

钉钉群配置




总结

1、使用Spring 全局异常,可以对代码异常信息进行统一拦截;

2、使用钉钉推送,将异常信息及时推送到技术人员群里,及时反馈;

3、技术人员通过报错信息,监控生产环境,也可以帮助高效解决问题。

示例代码github地址:

https://github.com/zhcyixin/zhc-java.git

欢迎大家下载,有问题可以在评论区交流。

【Java项目】Spring-全局异常+钉钉推送(实现生产问题监控)的评论 (共 条)

分享到微博请遵守国家法律