背景描述
目前本人负责一个web项目,该项目为兄弟小组提供接口,供其他小组使用。 公司希望能够及时监控到每个接口的报错。以便在客户或同事提出bug之前将其解决。
原料
spring web项目,restful风格接口。
代码开发思路
有两个思路,
第一个思路是用拦截器来拦截所有接口的返回responseObject,获取其中的resultCode,用以判断接口是否出现异常;
先是实践第一个思路中从httpServletResponse中获取返回字段,后面发现要写的代码量比较多。具体思路大概是过滤器+ 代理HttpServletResponseWrapper,来拿到返回字段。实现逻辑可以参考这篇博客https://blog.csdn.net/KokJuis/article/details/77371324 。
更改其中的加密逻辑来实现你自己的目的了。
第二个是利用切面工程,将所有controller目录下的类都切一下,如果出现异常,就通知一下。这篇文章具体介绍第二个思路,也就是用切面工程来实现监控接口。
具体思路就是切面加通知,简单直接。
代码
/**
* @author Wu, xx
* @version 1.0
* @date 2022/5/16 14:56
* 接口异常监控
*/
@Aspect
@Component
@Order(Integer.MIN_VALUE)
public class MyAspect {
@Autowired
private UserService userService;
private static Logger log = (Logger) LogManager.getLogger(MyAspect.class.getName());
@Around("execution(* com.xxx.controller..*Controller.*(..))")
public Object recordTimeLog(ProceedingJoinPoint joinPoint) throws Throwable {
// 记录开始时间