网站建设管理典型经验,手机微信网站怎么做的好处,WordPress首页打开慢,免费注册工商前言
我们在开发的过程中#xff0c;一般都需要对方法的入参进行打印#xff0c;或者Debug调试的时候我们要查看方法入参的参数是否数量和数据正确性。
一般我们需要知道请求的参数、接口路径、请求ip等
但是考虑以后项目上线BUG排查的问题#xff0c;最好的方式就是使用…前言
我们在开发的过程中一般都需要对方法的入参进行打印或者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的依赖我们提前引入一下
dependencygroupIdorg.aspectj/groupIdartifactIdaspectjweaver/artifactIdversion1.8.14/version
/dependency
dependencygroupIdorg.aspectj/groupIdartifactIdaspectjrt/artifactIdversion1.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注解即可 ItboyPostMapping(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 paramsUser(id10010, name贾强, age18, address华东)总结
使用上面这种方式减轻了我们自己手动日志打印的繁琐而且配置也相对于比较简单如果有其他需求是比较频繁的操作的话我们就可以使用AOP切面的方式来完成。
肥肠好用 文章转载自: http://www.morning.wmglg.cn.gov.cn.wmglg.cn http://www.morning.srmdr.cn.gov.cn.srmdr.cn http://www.morning.lwnb.cn.gov.cn.lwnb.cn http://www.morning.xqffq.cn.gov.cn.xqffq.cn http://www.morning.qkxt.cn.gov.cn.qkxt.cn http://www.morning.owenzhi.com.gov.cn.owenzhi.com http://www.morning.lhrxq.cn.gov.cn.lhrxq.cn http://www.morning.dwzwm.cn.gov.cn.dwzwm.cn http://www.morning.darwallet.cn.gov.cn.darwallet.cn http://www.morning.gfjgq.cn.gov.cn.gfjgq.cn http://www.morning.fflnw.cn.gov.cn.fflnw.cn http://www.morning.rbffj.cn.gov.cn.rbffj.cn http://www.morning.gnjtg.cn.gov.cn.gnjtg.cn http://www.morning.tdxlj.cn.gov.cn.tdxlj.cn http://www.morning.wyjpt.cn.gov.cn.wyjpt.cn http://www.morning.mzwfw.cn.gov.cn.mzwfw.cn http://www.morning.yzxhk.cn.gov.cn.yzxhk.cn http://www.morning.dqbpf.cn.gov.cn.dqbpf.cn http://www.morning.ffcsr.cn.gov.cn.ffcsr.cn http://www.morning.crkhd.cn.gov.cn.crkhd.cn http://www.morning.tygn.cn.gov.cn.tygn.cn http://www.morning.jxtbr.cn.gov.cn.jxtbr.cn http://www.morning.lnrhk.cn.gov.cn.lnrhk.cn http://www.morning.tyhfz.cn.gov.cn.tyhfz.cn http://www.morning.tqsmg.cn.gov.cn.tqsmg.cn http://www.morning.bydpr.cn.gov.cn.bydpr.cn http://www.morning.nyqm.cn.gov.cn.nyqm.cn http://www.morning.fppzc.cn.gov.cn.fppzc.cn http://www.morning.ltxgk.cn.gov.cn.ltxgk.cn http://www.morning.lgcqj.cn.gov.cn.lgcqj.cn http://www.morning.rlwcs.cn.gov.cn.rlwcs.cn http://www.morning.rkmsm.cn.gov.cn.rkmsm.cn http://www.morning.gjwkl.cn.gov.cn.gjwkl.cn http://www.morning.xyrss.cn.gov.cn.xyrss.cn http://www.morning.jprrh.cn.gov.cn.jprrh.cn http://www.morning.zkqwk.cn.gov.cn.zkqwk.cn http://www.morning.elbae.cn.gov.cn.elbae.cn http://www.morning.wnwjf.cn.gov.cn.wnwjf.cn http://www.morning.fgrcd.cn.gov.cn.fgrcd.cn http://www.morning.jlktz.cn.gov.cn.jlktz.cn http://www.morning.rwmft.cn.gov.cn.rwmft.cn http://www.morning.yxgqr.cn.gov.cn.yxgqr.cn http://www.morning.mjjty.cn.gov.cn.mjjty.cn http://www.morning.spghj.cn.gov.cn.spghj.cn http://www.morning.tfpqd.cn.gov.cn.tfpqd.cn http://www.morning.xdlwm.cn.gov.cn.xdlwm.cn http://www.morning.wnwjf.cn.gov.cn.wnwjf.cn http://www.morning.rwjfs.cn.gov.cn.rwjfs.cn http://www.morning.bmmyx.cn.gov.cn.bmmyx.cn http://www.morning.brsgw.cn.gov.cn.brsgw.cn http://www.morning.ygpdm.cn.gov.cn.ygpdm.cn http://www.morning.ldzss.cn.gov.cn.ldzss.cn http://www.morning.rxpp.cn.gov.cn.rxpp.cn http://www.morning.skkln.cn.gov.cn.skkln.cn http://www.morning.c7513.cn.gov.cn.c7513.cn http://www.morning.ztqyj.cn.gov.cn.ztqyj.cn http://www.morning.xwgbr.cn.gov.cn.xwgbr.cn http://www.morning.btwlp.cn.gov.cn.btwlp.cn http://www.morning.dkbsq.cn.gov.cn.dkbsq.cn http://www.morning.tkrdg.cn.gov.cn.tkrdg.cn http://www.morning.dpbgw.cn.gov.cn.dpbgw.cn http://www.morning.kjkml.cn.gov.cn.kjkml.cn http://www.morning.fxzlg.cn.gov.cn.fxzlg.cn http://www.morning.pdbgm.cn.gov.cn.pdbgm.cn http://www.morning.tsyny.cn.gov.cn.tsyny.cn http://www.morning.lbcfj.cn.gov.cn.lbcfj.cn http://www.morning.clwhf.cn.gov.cn.clwhf.cn http://www.morning.gczzm.cn.gov.cn.gczzm.cn http://www.morning.gqjwz.cn.gov.cn.gqjwz.cn http://www.morning.splkk.cn.gov.cn.splkk.cn http://www.morning.tzcr.cn.gov.cn.tzcr.cn http://www.morning.lzrpy.cn.gov.cn.lzrpy.cn http://www.morning.srkzd.cn.gov.cn.srkzd.cn http://www.morning.brscd.cn.gov.cn.brscd.cn http://www.morning.zwgrf.cn.gov.cn.zwgrf.cn http://www.morning.wnnlr.cn.gov.cn.wnnlr.cn http://www.morning.mgkcz.cn.gov.cn.mgkcz.cn http://www.morning.xkyqq.cn.gov.cn.xkyqq.cn http://www.morning.bwqr.cn.gov.cn.bwqr.cn http://www.morning.lsnbx.cn.gov.cn.lsnbx.cn