package com.gk.firework.Config.Log; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.gk.firework.Domain.Exception.BusinessException; import org.apache.log4j.Logger; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.aspectj.lang.annotation.Pointcut; 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.text.SimpleDateFormat; import java.util.Arrays; import java.util.Date; import java.util.Objects; @Aspect @Component public class JsonParamsLogAspect { private static final Logger logger = Logger.getLogger(JsonParamsLogAspect.class); @Pointcut("@annotation(com.gk.firework.Domain.Log.JsonParams)") public void controllerAspect(){ } @Before(value = "controllerAspect()") public void beforeEnterControllerExecute(JoinPoint point) { this.logHandle(point); } private void logHandle(JoinPoint point) { try { Object[] args = point.getArgs(); if (args.length != 1) throw new BusinessException("系统错误,参数对象只能是一个且固定"); HttpServletRequest request = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest(); String url = request.getRequestURL().toString(); SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String current = formatter.format(new Date()); Object arg = args[0]; if (arg instanceof JSONArray || arg instanceof JSONObject) { logger.info("\n请求时间:" + current + "\n请求地址:" + url + "\n请求参数:" + arg.toString()); } } catch (BusinessException e) { e.printStackTrace(); logger.error(e.getMessage()); } catch (Exception e) { e.printStackTrace(); } } }