此方法为打印全部请求的日志,至于日志的插入本文不作介绍。
具体说明如下:
使用Gradle 导包 :
compile 'org.springframework.boot:spring-boot-starter-aop
创建一个类:
package cn.cityworks.utils;
import javax.servlet.http.HttpServletRequest;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
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;
@Aspect
@Component
public class AspectLog {
Logger log = LoggerFactory.getLogger(AspectLog.class);
/**
* http访问方法之前 切入
* 1.com.david.translate.controller.*.*
* 这个路径 是一直要指定到你的方法层级。
* 如:com.david.translate.controller.UserController。java
* 需要配置的execution就是 com.david.translate.controller.*.*(..)
* 第一个*指的是controller 下的所有类
* 第二个*指的是类里面的所有方法
* 2.如果这块指定的目录没有到方法,则会跑出异常。
* @param join
*/
@Before("execution(public * cn.cityworks.controller.*.*(..))")
public void beforLog(JoinPoint join){
ServletRequestAttributes attriButes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = attriButes.getRequest();
//打印url
log.info("url:{}", request.getRequestURL());
//打印请求方式
log.info("requet_method:{}", request.getMethod());
//打印类方法
log.info("class_method:{}", join.getStaticPart().getSignature().getDeclaringTypeName()
+ "."
+ join.getSignature().getName());
//打印参数
log.info("parameter:{}", join.getArgs());
//打印Ip
log.info("ip:{}", request.getLocalAddr());
}
/**
* http访问方法之后切入
*/
@After("execution(public * cn.cityworks.controller.*.*(..))")
public void afterLog(){
log.info("======================请求离开=========================");
}
/**
* 打印返回的数据
* 1.returning 的值 和 resultLog中的入参一致
* 2.pointcut 配置的是需要切入的配置
* @param obj
*/
@AfterReturning(returning="obj", pointcut="execution(public * cn.cityworks.controller.*.*(..))")
public void resultLog(Object obj){
log.info("return:{}", obj.toString());
}
}
结果显示: