写个日志请求切面,前后端甩锅更方便.docxVIP

写个日志请求切面,前后端甩锅更方便.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
写个日志恳求切面,前后端甩锅更便利 @Aspect = 声明该类为一个注解类 切点注解: @Pointcut = 定义一个切点,可以简化代码 通知注解: @Before = 在切点之前执行代码 @After = 在切点之后执行代码 @AfterReturning = 切点前往内容后执行代码,可以对切点的前往值进行封装 @AfterThrowing = 切点抛出特别后执行 @Around = 环绕,在切点前后执行代码 动手写一个恳求日志切面 使用@Pointcut 定义切点 @Pointcut(execution(*?your_package.controller..*(..))) public?void?requestServer()?{ } @Pointcut 定义了一个切点,由于是恳求日志切边,因而切点定义的是 Controller 包下的全部类下的方法。定义切点以后在通知注解中直接使用 requestServer 方法名就可以了 使用@Before 再切点前执行@Before(requestServer()) public?void?doBefore(JoinPoint?joinPoint)?{ ????ServletRequestAttributes?attributes?=?(ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); ????HttpServletRequest?request?=?attributes.getRequest(); ????LOGGER.info(===============================Start========================); ????LOGGER.info(IP?????????????????:?{},?request.getRemoteAddr()); ????LOGGER.info(URL????????????????:?{},?request.getRequestURL().toString()); ????LOGGER.info(HTTP?Method????????:?{},?request.getMethod()); ????LOGGER.info(Class?Method???????:?{}.{},?joinPoint.getSignature().getDeclaringTypeName(),?joinPoint.getSignature().getName()); } 在进入 Controller 方法前,打印出调用方 IP、恳求 URL、HTTP 恳求类型、调用的方法名 使用@Around 打印进入把握层的入参@Around(requestServer()) public?Object?doAround(ProceedingJoinPoint?proceedingJoinPoint)?throws?Throwable?{ ????long?start?=?System.currentTimeMillis(); ????Object?result?=?proceedingJoinPceed(); ????LOGGER.info(Request?Params???????:?{},?getRequestParams(proceedingJoinPoint)); ????LOGGER.info(Result???????????????:?{},?result); ????LOGGER.info(Time?Cost????????????:?{}?ms,?System.currentTimeMillis()?-?start); ????return?result; } 打印了入参、结果以及耗时 getRquestParams 方法 private?Map?getRequestParams(ProceedingJoinPoint?proceedingJoinPoint)?{ ?????Map?requestParams?=?new?HashMap(); ??????//参数名 ?????String[]?paramNames?=?((MethodSignature)proceedingJoinPoint.getSignature()).getParameterNames(); ?????//参数值 ?????Object[]?paramValues?=?proceedingJoinPoint.getArgs(); ?????for?(int?i?=?0;?i??paramNames.length;?i++)?{ ?????????O

文档评论(0)

bob157641554 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档