首页 > 作文

java通过AOP实现全局日志打印详解

更新时间:2023-04-04 16:10:55 阅读: 评论:0

目录
几个常用的切点注解,这次使用了@before和@around切controller打印请求的接口、参数、返回值以及耗时情况。切rvice打印日志,url,请求方式,ip,类名,方法总结

几个常用的切点注解,这次使用了@before和@around

1.@before 前置增强(目标方法执行之前,执行注解标注的内容)

2.@afterreturning 后置增强(目标方法正常执行完毕后,执行)

3.@around 环绕增强(目标方法执行前后,分别执行一些代码)

4.@afterthrowing 抛出增强(目标方法发生异常,执行)

5.@after final增强(不管是抛出异常还是正常退出,该增强都会得到执行。一般用于释放资源,相当于try{}finally{})。

切controller打印请求的接口、参数、返回值以及耗时情况。

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;    }}

切rvice打印日志,url,请求方式,ip,类名,方法

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 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图