当前位置: 首页 > news >正文

免费门户网站建设谷歌公司网站费用

免费门户网站,建设谷歌公司网站费用,青年旅行社网站建设规划书,简历模板制作神器背景 业务组有一些给开发用的后门接口,为了做到调用溯源,业务组最近需要记录所有接口的访问记录,暂时只需要记录接口的响应结果,如果调用失败,则记录异常信息。由于后门接口较多以及只是业务组内部轻度使用&#xff0…

背景

业务组有一些给开发用的后门接口,为了做到调用溯源,业务组最近需要记录所有接口的访问记录,暂时只需要记录接口的响应结果,如果调用失败,则记录异常信息。由于后门接口较多以及只是业务组内部轻度使用,因此使用了切面的方式实现。

方案

@EnableAspectJAutoProxy
@Aspect
@Component
@Slf4j
public class ResponseLogAspect {@Resourceprivate CommonConstants commonConstants;@Pointcut("@annotation(*.log.ResponseLog)")public void logPointcut() {}/*** 执行成功打印*/@AfterReturning(pointcut = "logPointcut()", returning = "result")public void log(JoinPoint joinPoint, Object result) {try {// 降级开关if (!commonConstants.getBoolean("interface.response.log.switch", true)) {return;}ResponseLog annotation = findAnnotation(joinPoint, ResponseLog.class);String metric = metric(annotation.value(), joinPoint);log.info("interface success: {}, result: {}", metric, result);} catch (Exception e) {log.error("log error", e);QMonitor.recordOne("interface_response_log_fail");}}/*** 执行失败打印*/@AfterThrowing(pointcut = "logPointcut()", throwing = "error")public void logError(JoinPoint joinPoint, Throwable error) {try {// 降级开关if (!commonConstants.getBoolean("interface.response.log.switch", true)) {return;}ResponseLog annotation = findAnnotation(joinPoint, ResponseLog.class);String metric = metric(annotation.value(), joinPoint);log.error("interface fail: {}, error: {}", metric, error.getMessage());} catch (Exception e) {log.error("log error", e);QMonitor.recordOne("interface_response_log_fail");}}/*** 监控指标* @param specificName 具体指标名* @param point 切点* @return 指标名称*/private String metric(String specificName, JoinPoint point) {if (StringUtils.isBlank(specificName)) {String clz = point.getTarget().getClass().getSimpleName();String mtd = point.getSignature().getName();return clz + "_" + mtd;} else {return specificName;}}/*** 注解查询* @param point 切点* @param annotationType 注解类型* @return 注解信息*/private <A extends Annotation> A findAnnotation(JoinPoint point, Class<A> annotationType) {MethodSignature signature = (MethodSignature) point.getSignature();return AnnotationUtils.findAnnotation(signature.getMethod(), annotationType);}
}

接下来只需要在后门接口上增加对应的注解即可:

    @RequestMapping(value = "save", method = RequestMethod.POST)@ResponseBody@ResponseLog("/voucher/save")public APIResponse<Boolean> save(HttpServletRequest request, @RequestBody VoucherCommit voucherCommit) {// 代金券保存接口}

加餐

  1. @Target({ElementType.METHOD}):指定该注解可以应用于方法。如果不加这个注解,则表示默认该注解可以应用到类与方法上,但是加上后就表示这个注解只能作用于方法,否则会报错。
  2. springboot项目由于存在spring-boot-autoconfigure依赖,会默认开启aop代理,所以注解@EnableAspectJAutoProxy可以不用加,但是由于可以在配置文件中修改默认开启的逻辑,所以建议加上避免失效。
  3. @Pointcut注解中的参数:@within和@annotation。@annotation注解用于匹配那些具有指定注解的方法,@within注解用于匹配那些具有指定注解的类中的所有方法,即使这些方法本身没有显式地标注注解。
    // 切点:匹配带有@OnlyIntranetAccess注解的类@Pointcut("@within(org.openmmlab.platform.common.annotation.OnlyIntranetAccess)")public void onlyIntranetAccessOnClass() {}// 切点:匹配带有@OnlyIntranetAccess注解的方法@Pointcut("@annotation(org.openmmlab.platform.common.annotation.OnlyIntranetAccess)")public void onlyIntranetAccessOnMethed() {}

http://www.yayakq.cn/news/396171/

相关文章:

  • 福建自己建设网站女装网站建设项目可行性分析
  • 公司做网站需要准备哪些资料软件公司
  • 山西长治做网站公司有哪些免费推广网站搭建
  • 网站设计网站建设毕业文稿网站流量统计
  • 网站建设 甘肃网站开发的安全策略
  • 做微信公众号的网站吗Wordpress需要费用吗
  • 物联网应用seo推广软件排行榜
  • 网站建设经费的请示wordpress的title
  • 外链的论坛网站wordpress修改固定连接
  • 网站不备案能访问吗中国专门做统计网站
  • vps看网站蜘蛛大连做网站仟亿科技
  • 蚌埠网站设计广州开发区控股集团有限公司
  • 大型门户网站开发教程专业摄影网站
  • 腾云公司做网站wordpress获取评论回复
  • python网站开发 完整例子网站调研方法有哪些内容
  • 中国建设银行沈阳铁西支行网站高端网站设计公司名单
  • 工程类招聘网站哪个好公司网站的设计方案
  • 网站建设入账时进那个会计科目怎么建网站app
  • psdw做网站wordpress资源分享网
  • 网站轮播图怎么做的网页设计主题描述
  • 海外网站建设教程酒店网站 asp.net
  • 成都网站asp access源码购买修改杭州做网站博客
  • 做网站美工要学什么租服务器去哪里租
  • 章丘网站定制古楼角网站建设
  • 国外服务器做网站中能建设集团电子商务网站
  • 网站开发建设方案求个国外在线网站
  • 南宁在百度上建网站杭州cms模板建站
  • 做视频哪个网站素材好网络设计与制作专业
  • 外贸网站建站注意事项及价格郑州做网站推广多少钱
  • 奎屯建设局网站建筑工程网线接头规范