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

金华兰溪网站建设百度搜题

金华兰溪网站建设,百度搜题,产品review网站怎么做,做网站赚钱还是做app赚钱前言 我们在开发的过程中,一般都需要对方法的入参进行打印,或者Debug调试的时候我们要查看方法入参的参数是否数量和数据正确性。 一般我们需要知道请求的参数、接口路径、请求ip等 但是考虑以后项目上线BUG排查的问题,最好的方式就是使用…

前言

我们在开发的过程中,一般都需要对方法的入参进行打印,或者Debug调试的时候我们要查看方法入参的参数是否数量和数据正确性。

一般我们需要知道请求的参数接口路径请求ip

但是考虑以后项目上线BUG排查的问题,最好的方式就是使用切面的方式来记录每个方法执行时要保存的日志处理,那么下面我们来实现一个使用自定义注解的方式来对每个请求的方法上进行日志存储

AOP切面:对某个方法进行增强处理,例如在某个方法执行前或者执行后进行操作。

案例

首先我们看一个controller接口

import lombok.extern.slf4j.Slf4j;@Slf4j
@RestController
@RequestMapping("/user/")
public class TestController {@PostMapping("getUserById")public String getUserById(@RequestBody User user) {log.info("/user/getUserById params:{}", user.toString());//执行代码逻辑...return "请求成功";}
}

这种一般没什么问题,一般我们测试的时候都可以这样来写,但如果有很多的方法,那么每个方法都这样写,显然很是繁琐,那么我们通过下面的方式来实现当进入方法前打印请求的一些信息

实现

我们自定义一个注解,名为Itboy

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)//ElementType.METHOD表示为该注解在方法上添加
public @interface Itboy {
}

然后需要用到一些依赖,这些是使用AOP的依赖,我们提前引入一下

<dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.8.14</version>
</dependency>
<dependency><groupId>org.aspectj</groupId><artifactId>aspectjrt</artifactId><version>1.9.19</version>
</dependency>

然后我们定义一个切面类,名为ItboyAspect
注:这篇文章我使用的System打印方式,如果需要保存日志,换为对应的logger.info()即可。

import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;import javax.servlet.http.HttpServletRequest;
import java.text.SimpleDateFormat;
import java.util.Date;@Component
@Aspect
@Slf4j
public class ItboyAspect {//@Pointcut:为切入点,切入到Itboy这个注解上面@Pointcut("@annotation(com.mayikt.demo.Itboy)")public void itboyAspect() {}//@Before为在进入切点之前自动执行Before中的逻辑(进入之前的前提是方法上需要有我们设置的自定注解)@Before("itboyAspect()")public void beforeItboy(JoinPoint joinPoint) {//获取本次请求ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();HttpServletRequest request = requestAttributes.getRequest();//获取到方法名String methodName = joinPoint.getSignature().getName();System.err.println("======================================方法:" + methodName + "() 开始======================================");//执行时间SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date date = new Date();String time = sdf.format(date);System.err.println("时间                 : " + time);//请求URLSystem.err.println("URL                 : " + request.getRequestURL());//请求方法System.err.println("HTTP Method         : " + methodName);//打印controller全路径和执行方法System.err.println("Class Method        : " + joinPoint.getSignature().getDeclaringTypeName() + "." + methodName);//请求IPSystem.err.println("IP                  : " + request.getRemoteHost());//请求入参System.err.println("Requert params      : " + JSON.toJSONString(joinPoint.getArgs()));}//后置通知@After("itboyAspect()")public void afterItboy(JoinPoint joinPoint) {//获取到方法名String methodName = joinPoint.getSignature().getName();System.err.println("======================================方法:" + methodName + "() 结束======================================");}
}

然后我们只需要在需要保存的方法上添加@Itboy注解即可

	@Itboy@PostMapping("selectUserList")public String getUserById(@RequestBody User user) {log.info("/user/selectUserList params:{}", user.toString());//执行代码逻辑...return "请求成功";}

最后我们来看一下效果

2023-04-02 14:21:29.033  INFO 5912 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 1 ms
======================================方法:getUserById() 开始======================================
时间                 : 2023-04-02 14:21:29
URL                 : http://127.0.0.1:8080/user/selectUserList
HTTP Method         : getUserById
Class Method        : com.mayikt.demo.TestController.getUserById
IP                  : 127.0.0.1
Requert params      : [{"address":"华东","age":18,"id":10010,"name":"贾强"}]
======================================方法:getUserById() 结束======================================
2023-04-02 14:21:29.171  INFO 5912 --- [nio-8080-exec-1] com.mayikt.demo.TestController           : /user/selectUserList params:User(id=10010, name=贾强, age=18, address=华东)

总结

使用上面这种方式,减轻了我们自己手动日志打印的繁琐,而且配置也相对于比较简单,如果有其他需求是比较频繁的操作的话,我们就可以使用AOP切面的方式来完成。

肥肠好用

http://www.hrbkazy.com/news/18131.html

相关文章:

  • 毕业设计论文网站开发需要多少钱衡水seo优化
  • 织梦网站入侵方法长沙网络推广外包费用
  • 山西cms建站系统价格手机google官网注册账号入口
  • 高端网网站建设广东公共广告20120708
  • 怎么用dw软件做网站seo怎么做?
  • 哪些网做网站比较好疫情死亡最新数据消息
  • 代刷网自助建站系统小程序开发费用明细
  • 网站后台用什么语言专业网站制作
  • 江西网站备案流程免费外链工具
  • 中国互联网协会电子竞技工作委员会百度seo优化按年收费
  • 子商务网站建设的一般流程百度推广开户
  • 东华建设官方网站官网设计公司
  • 福州网站制作有限公司seo外链平台热狗
  • 黑彩网站自己可以做么做网站seo怎么赚钱
  • 怎么看得出网站是哪个公司做的百度seo原理
  • 响应式外贸营销网站手机搜索引擎
  • 电商网站备案自己建网站详细流程
  • 哪家建设网站seo服务公司上海
  • 建设网站所需材料广告推广投放平台
  • 免费服装网站模板沈阳今日新闻头条
  • 阿里备案成功后怎么做网站网站推广的一般流程是
  • php制作网站开发网址大全qq浏览器
  • 闵行广州网站建设网站定制开发
  • 政府网站建设 江苏省口碑营销的模式
  • pc端网站手机版怎么做企业网络营销策划方案范文
  • 做外贸用哪些网站厦门seo报价
  • 金融 网站 源码站长之家爱站网
  • 百度 网站描述福州seo优化排名推广
  • 做网站大概价格游戏推广员是做什么的
  • 自己做的网站很卡营销策划与运营方案