spring AOP打印全局日志

在进入controller前打印,请求参数,日志信息。方便调查。

package com.tuzhuang.tuzhuangserver.config;

import com.google.gson.Gson;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;
/**
 * 日志打印
 **/
@Aspect
@Component
@Slf4j
public class WebLogAspect {
  
    /** 以 controller 包下定义的所有请求为切入点 */
    @Pointcut("execution(public * com.tz.controller..*.*(..))")
    public void webLog() {}    
    /**
      * 在切点之前织入    
      * @param joinPoint    
      * @throws Throwable    
      */
    @Before("webLog()")
    public void doBefore(JoinPoint joinPoint) {
        try{
            // 开始打印请求日志
            ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
            HttpServletRequest request = attributes.getRequest();
            // 打印请求相关参数
            log.info("========================================== Start ==========================================");
            // 打印请求 url
            log.info("URL      : {}", request.getRequestURL().toString());
            // 打印 Http method
            log.info("HTTP Method  : {}", request.getMethod());
            // 打印调用 controller 的全路径以及执行方法
            log.info("Class Method  : {}.{}", joinPoint.getSignature().getDeclaringTypeName(), joinPoint.getSignature().getName());
            // 打印请求的 IP
            log.info("IP       : {}", request.getRemoteAddr());
            // 打印请求入参
            String args = new Gson().toJson(joinPoint.getArgs());
            log.info("Request Args  : {}", args);
        } catch (Exception e) {
            log.error("日志打印失败");
        }
    }
    /**
      * 在切点之后织入    
      * @throws Throwable    
      */
    @After("webLog()")
    public void doAfter() throws Throwable {    
        log.info("=========================================== End ===========================================");    
        // 每个请求之间空一行    
        log.info("");    
    }    
    /**
      * 环绕    
      * @param proceedingJoinPoint    
      * @return    
      * @throws Throwable    
      */
    @Around("webLog()")
    public Object doAround(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {    
        long startTime = System.currentTimeMillis();    
        Object result = proceedingJoinPoint.proceed();    
        // 打印出参    
        // log.info("Response Args : {}", new Gson().toJson(result));
        // 执行耗时    
        log.info("Time-Consuming : {} ms", System.currentTimeMillis() - startTime);    
        return result;    
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值