【5】Spring Boot系列之 Aspects(1)【AspectJ】

(1)首先引入依赖

<dependency>
	<groupId>org.aspectj</groupId>
	<artifactId>aspectjweaver</artifactId>
</dependency>

(2)日志统一管理代码

@Aspect
@Order(1) //控制多个Aspect的执行顺序,越小越先执行
@Component
public class HttpLogAspect {

	private Logger LOG = LoggerFactory.getLogger(getClass());

    ThreadLocal<Long> startTime = new ThreadLocal<Long>();

    @Pointcut("execution(public * com.example.demo.controller.*.*(..))")
    public void httpLog() {}

    @Before("httpLog()")
    public void runBefore(JoinPoint joinPoint) {
        startTime.set(System.currentTimeMillis());
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = attributes.getRequest();
        LOG.info("URL : {}", request.getRequestURL()+" ["+request.getMethod()+"]");
        LOG.info("IP : {}", request.getRemoteAddr());
        Enumeration<String> headerNames = request.getHeaderNames();
        while(headerNames.hasMoreElements()) {
            String nextElement = headerNames.nextElement();
            LOG.info(nextElement.toUpperCase() + " : {}", request.getHeader(nextElement));
        }
        LOG.info("CLASS_METHOD : {}", joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName());
        LOG.info("PARAM : {}", null != request.getQueryString() ? JSON.toJSONString(request.getQueryString().split("&")) : "EMPTY");
    }

    @AfterReturning(returning = "response", pointcut = "httpLog()")
    public void runAfterReturning(Object response) {
        LOG.info("RESPONSE : {}", JSON.toJSONString(response));
        LOG.info("SPEND TIME : {}", (System.currentTimeMillis() - startTime.get()) + "ms");
    }
}

(3)效果如下所示:
在这里插入图片描述
参考:https://my.oschina.net/evanNmin/blog/1797914

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值