1.@before 前置增强(目标方法执行之前,执行注解标注的内容)
2.@afterreturning 后置增强(目标方法正常执行完毕后,执行)
3.@around 环绕增强(目标方法执行前后,分别执行一些代码)
4.@afterthrowing 抛出增强(目标方法发生异常,执行)
5.@after final增强(不管是抛出异常还是正常退出,该增强都会得到执行。一般用于释放资源,相当于try{}finally{})。
package com.tfjy.arbackend.aop; import com.alibaba.fastjson.jsonobject;import com.tfjy.arbackend.util.frontresult;import org.apache.commons.logging.log;import org.apache.commons.logging.logfactory;import org.aspectj.lang.proceedingjoinpoint;import org.aspectj.lang.annotation.around;import org.aspectj.lang.annotation.aspect;import org.aspectj.lang.annotation.pointcut;import org.springframework.stereotype.component;import org.springframewor中国佛教k.web.context.request.requestcontextholder;import org.springframework.web.context.request.rvletrequestattributes;import javax.rvlet.http.httprvletrequest;import javax.rvlet.http.httprvletrespon;import java.util.arraylist;import java.util.list; /** * 使用aop切controller打印日志 * * @author promsing(张有博) * @version 1.0.0 * @since 2021/12/5 - 21:09 */@aspect@componentpublic class restaopconfig { /** * 控制是否开启日志 */ public static boolean onoff = fal; private static log logger = logfactory.getlog(restaopconfig.class); @pointcut("execution(public * com.tfjy.arbackend.controller..*.*(..))") public void pointcutrestdef(){ } 评价员工的优点评语//环绕切点 @around("pointcutrestdef()") public object processrst(proceedingjoinpoint point) throws throwable{ object returnvalue = null; final list<object> params = new arraylist<>(); //获得请求信息 rvletrequestattributes sra =(rvletrequestattributes)requestcontextholder.getrequestattributes(); if(sra==nu英文文章ll){ return point.proceed(); } httprvletrequest request = sra.getrequest(); object[] args = point.getargs(); //过滤出httprvlet for (int i = 0; i < args.length; i++) { object object = args[i]; if (object instanceof httprvletrespon){ continue; } if (object instanceof httprvletrequest){ continue; } params.add(object); } logger.info( "rest method:——>"+point.getsignature().getdeclaringtypename()+"."+point.getsignature().getname()); string cloneparams = jsonobject.tojsonstring(params); logger.info("rest param:——>"+cloneparams); long starttime = system.currenttimemillis(); //去执行方法,这里的异常交给统一捕获异常去处理 returnvalue = point.proceed(point.getargs()); //处理返回值 if (returnvalue instanceof frontresult){ frontresult frontresult=(frontresult)returnvalue; logger.info("rest respon:——>"+frontresult.tostring()); } long endtime = system.currenttimemillis(); logger.info("rest"+request.getrequesturi()+"----ud time----"+(endtime - starttime)); boolean boolean1 =true; if (returnvalue != null && !returnvalue.equals(boolean1)){ logger.info(jsonobject.tojsonstring(returnvalue)); } return returnvalue; }}
package com.tfjy.arbackend.aop;import 韩国大使馆签证查询org.apache.commons.logging.log;import org.apache.commons.logging.logfactory;import org.aspectj.lang.joinpoint;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.springfra简单街舞教学视频mework.web.context.request.requestattributes;import org.springframework.web.context.request.requestcontextholder;import org.springframework.web.context.request.rvletrequestattributes;import javax.rvlet.http.httprvletrequest;import java.util.arrays;/** * 使用aop切rvice打印日志 * * @author promsing(张有博) * @version 1.0.0 * @since 2021/12/5 - 21:09 */@aspect //注解将一个java类定义为切面类@componentpublic class aopgetrvice { private static log logger = logfactory.getlog(aopgetrvice.class); /*使用@pointcut定义一个切入点,可以是一个规则表达式,比如下例中某个package下的所有函数,也可以是一个注解等。 根据需要在切入点不同位置的切入内容*/ @pointcut("execution(public * com.tfjy.arbackend.rvice..*.*(..))")//切入点描述 这个是rvice包的切入点 public void getrvicejournal() { }//签名,可以理解成这个切入点的一个名称 //前置切点 @before("getrvicejournal()")//在切入点开始处切入内容 public void logbeforervice(joinpoint joinpoint) { // 接收到请求,记录请求内容 requestattributes requestattributes = requestcontextholder.getrequestattributes(); if(requestattributes==null){ return ; } httprvletrequest request = ((rvletrequestattributes) requestattributes).getrequest(); // 记录下请求内容 logger.info("url : " + request.getrequesturl().tostring()); logger.info("http_method : " + request.getmethod()); logger.info("ip : " + request.getremoteaddr()); //下面这个getsignature().getdeclaringtypename()是获取包+类名的 然后后面的joinpoint.getsignature.getname()获取了方法名 logger.info("class_method : " + joinpoint.getsignature().getdeclaringtypename() + "." + joinpoint.getsignature().getname()); logger.info("args : " + arrays.tostring(joinpoint.getargs())); }}
到此这篇关于java通过aop实现全局日志打印的文章就介绍到这了,更多相关 aop全局日志打印内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!
本文发布于:2023-04-04 16:10:53,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/e3f5e47823f8cff93d016a270b8201a4.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:java通过AOP实现全局日志打印详解.doc
本文 PDF 下载地址:java通过AOP实现全局日志打印详解.pdf
留言与评论(共有 0 条评论) |