使用AOP編程思想,打印日誌,輸出請求信息,便於查找錯誤。


/**
 * 切面 日誌
 */
@Slf4j
@Aspect
@Component
public class LogAspect {
    //Logger logger= Logger.getLogger(LogAspect.class);
    private static final Logger log = LoggerFactory.getLogger(LogAspect.class);
    long startTime ;
    long endTime;

    /**
     * 切點
     */
    @Pointcut(value = "(execution(* com.how2java..web.*.*(..)))")
    public void log(){

    }

    /**
     * 前置通知
     * @param joinpoint
     */
    @Before(value = "log()")
    public void doBefore(JoinPoint joinpoint){
        log.info("前置通知");
        startTime = System.currentTimeMillis();
        //請求
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = attributes.getRequest();
        StringBuffer sb = new StringBuffer();
        //請求url
        String reqUrl = request.getRequestURL().toString();
        String method = request.getMethod();
        sb.append("請求url:" + reqUrl + "  " + method + "\n");

//        if(request.getMethod().equalsIgnoreCase(RequestMethod.GET.name())){
//            Map<String, String[]> parameterMap = request.getParameterMap();
//            Map<String, String> paramMap = new HashMap<>();
//            parameterMap.forEach((key, value) -> paramMap.put(key, Arrays.stream(value)
//                    .collect(Collectors.joining(","))));
//            sb.append("請求內容:"+JSON.toJSONString(paramMap));
            Object[] args = joinpoint.getArgs();
            String[] params = ((CodeSignature)joinpoint.getSignature()).getParameterNames();
            for(int i=0;i<args.length;i++){
                log.info("param is :{},arg is:{}",params[i],args[i]);
            }

//        }else if(request.getMethod().equalsIgnoreCase(RequestMethod.POST.name())){
//            Object[] args = joinpoint.getArgs();
//            String[] params = ((CodeSignature)joinpoint.getSignature()).getParameterNames();
//            StringBuilder sb1 = new StringBuilder();
//            Arrays.stream(args).forEach(object -> sb1.append(object.toString().replace("=",":")));
//            if(sb1.length() == 0){
//                sb1.append("{}");
//            }
//            sb1.append("請求參數:"+sb1.toString());
//        }
        log.info("請求:{}",sb.toString());


    }

    /**
     * 後置通知
     */
    @After(value = "log()")
    public void doAfter(){
        endTime = System.currentTimeMillis();

        log.info("後置通知:間隔時間:{}",String.valueOf(endTime-startTime));
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章