自用AOP切面日志代码

发布于:2024-05-18 ⋅ 阅读:(124) ⋅ 点赞:(0)

自用AOP切面日志代码,放在aspect目录下即可,日后只需要修改包名

/**
 * 统一日志处理切面
 * @author 江南
 */
@Aspect
@Component
@Slf4j
@SuppressWarnings("all")
public class WebLogAspect {

    @Autowired
    private ObjectMapper mapper;
    private static final Integer PRINY_LOG_SIZE_LIMIT = 100;
    
    /*以controller 包下定义的所有请求为切点,以后只改包名*/
    @Pointcut("execution(public * com.yase.system.controller..*.*(..)))")
    public void webLog(){}
    
    //前置通知
    @Before("webLog()")
    public void doBefore(JoinPoint joinPoint) throws Throwable{
        //开始打印请求日志
        ServletRequestAttributes attributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = attributes.getRequest();
   
        //打印请求参数信息
        log.debug("========================== Request Coming =========================");
        log.debug("URL:[{}]",request.getRequestURI().toString());
        log.debug("HTTP Method:[{}]",request.getMethod());
        
        //打印调用controller 的全路径和执行方法
        log.debug("Class Method:[{}].[{}]",joinPoint.getSignature().getDeclaringTypeName(),
                joinPoint.getSignature().getName());
        
        //打印请求入参
        String requestArgs = mapper.writeValueAsString(joinPoint.getArgs());
        if(requestArgs.length() >PRINY_LOG_SIZE_LIMIT ){
            log.trace("Request Args : [{}]",requestArgs);
        }else {
            log.debug("Request Args : [{}]",requestArgs);
        }
    }
    
    @After("webLog()")
    public void doAfter() throws Throwable{
        log.debug("========================== Request Done =========================");
        //方便排查日志
        log.debug("");
       
    }
    
    @Around("webLog()")
    public Object doAround(ProceedingJoinPoint proceedingJoinPoint) throws Throwable{
        long oldTime = System.currentTimeMillis();
        Object result = proceedingJoinPoint.proceed();
        String resultjson = mapper.writeValueAsString(result);
        if(resultjson.length() >PRINY_LOG_SIZE_LIMIT ){
            log.trace("Request Args : [{}]",resultjson);
        }else {
            log.debug("Request Args : [{}]",resultjson);
        }
        long time = System.currentTimeMillis();
        log.debug("Time Elapsed : [{}]",time - oldTime);
        return  result;
    }

}