记录用户行为logger日志,Aspect打印入参和出参

1. 调用某些方法是有时候要自己方法的入参和出参很麻烦,可以用Aspect做统一日志处理,仅对Class类(注意非接口)使用,在类的方法上加上

@ApiOperation 注解如下
 
  
@ResponseBody
@RequestMapping(value = "/url", method = RequestMethod.GET)
@ApiOperation(value = "描述", response = ApiResponse.class)
public Object selectDataList_Announcement(
      @ApiParam(value = "JWT快捷输入入口") @RequestHeader(value="Authorization", required=false) String jwt,
      @ApiParam(value = "用户凭证") @RequestAttribute(name="userToken", required=false) UserBlock userToken,
      @ApiParam(value = "入参") @RequestParam("input") String input
   ){ //业务操作
   return null;
}


 
  
@Aspect
@Component
public class OperationLogger {
   protected Logger logger = LoggerFactory.getLogger(OperationLogger.class);
   
  
   @Around(value = "within(@org.springframework.stereotype.Controller *) && @annotation(annotation) &&args(object,..) ", argNames = "annotation,object")
   public Object logApiAccess(ProceedingJoinPoint point, ApiOperation annotation, Object object) throws Throwable {
      String apiDescription = annotation.value();
      
      String className = point.getTarget().getClass().getName();
      String methodName = point.getSignature().getName();
      Map, String[]> paramBuffer = getMethodRemark(point);
      
      HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
      StringBuffer url = request.getRequestURL();
      
        LinkedHashMap, Object> map = Maps.newLinkedHashMap();
        map.put("[1-类名]", className);
        map.put("[2-方法]", methodName);
        map.put("[3-URL]", url);
        map.put("[4-参数]", paramBuffer);
      String strMessage = JSON.toJSONString(map, true);
      this.logger.info("开始 -> 【{}】\n{}", apiDescription, strMessage);
      Object proceed = point.proceed();
      this.logger.info("结束 <- 【{}】\n", JSON.toJSONString(apiDescription));
      return proceed;
   }
   
   private Map, String[]> getMethodRemark(JoinPoint point) {
      Object[] params = point.getArgs();
      if (params != null && params.length > 0) {
         HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
         request.getRequestURL();
         Map, String[]> parameterMap = request.getParameterMap();
         return parameterMap;
      }
      
      return Maps.newHashMap();
   }
}


你可能感兴趣的:(记录用户行为logger日志,Aspect打印入参和出参)