SpringBoot进阶之AOP统一处理http请求日志

来源:互联网 发布:国外购物网站 知乎 编辑:程序博客网 时间:2024/05/21 09:23

相关注解

1、@Aspect  放在类上面,把该类作为一个切面

2、@Pointcut  放在方法上面,定义一个可被别的方法引用的切入点表达式

3、@Before  放在方法上面,前置通知   方法执行前执行

4、@After   放在方法上面     后置最终通知    方法最后执行

5、@AfterReturning   放在方法上面    后置返回通知    方法执行完执行

6、@AfterThrowing   放在方法上面      后置异常通知     方法异常时执行

7、@Around    放在方法上面      环绕通知


---------------------示例代码---------------------

在pom.xml中配置

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency>

HttpAspect类代码

package com.tg.aspect;import ch.qos.logback.core.net.SyslogOutputStream;import org.apache.tomcat.util.http.fileupload.RequestContext;import org.aspectj.lang.JoinPoint;import org.aspectj.lang.ProceedingJoinPoint;import org.aspectj.lang.annotation.*;import org.slf4j.Logger;import org.slf4j.LoggerFactory;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.util.Objects;/** * Created by TG on 2017-10-12. */@Aspect@Componentpublic class HttpAspect {     private  final static Logger logger=LoggerFactory.getLogger(HttpAspect.class);    @Pointcut("execution(public * com.tg.controller.GirlController.*(..))")    public void log(){    }    @Around("log()")    public Object aroundLogCalls(ProceedingJoinPoint jp) throws Throwable {        logger.info("方法环绕start.....");        Object o = null;        try {            o = jp.proceed();        } catch (Throwable e) {            e.printStackTrace();        }        logger.info("方法环绕end.....");        return o;    }    /**     * 打印请求的url method ip 类方法  参数     * @param joinPoint     */    @Before("log()")    public void doBefore(JoinPoint joinPoint){        ServletRequestAttributes attributes= (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();        HttpServletRequest request =attributes.getRequest();        //url        logger.info("url={}",request.getRequestURL());        //method        logger.info("method={}",request.getMethod());        //ip        logger.info("ip={}",request.getRemoteAddr());        //类方法        logger.info("class_method={}",joinPoint.getSignature().getDeclaringTypeName()+"."+joinPoint.getSignature().getName());         //参数        logger.info("args={}",joinPoint.getArgs());    }   // @After("execution(public * com.tg.controller.GirlController.*(..))")    @After("log()")    public void doAfter(){        logger.info("方法结束");    }    /**     * 打印请求的具体内容     * @param objects     */    @AfterReturning(returning = "objects",pointcut = "log()")    public void  doAfterReturning(Objects objects){        logger.info("response={}",objects);    }     @AfterThrowing("log()")    public void cathInfo(){         logger.info("异常信息");     }}

执行效果图


阅读全文
0 0