/**
* 切面 日誌
*/
@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));
}
}