package cn.besteam.common.aspect;
|
|
import cn.besteam.common.aspect.annotation.LogApi;
|
import cn.besteam.common.util.IPUtils;
|
import com.alibaba.fastjson.JSON;
|
import lombok.extern.slf4j.Slf4j;
|
import org.aspectj.lang.ProceedingJoinPoint;
|
import org.aspectj.lang.annotation.Around;
|
import org.aspectj.lang.annotation.Aspect;
|
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.util.Arrays;
|
|
/**
|
* @author Kinsey Huang
|
* @email 996842803@qq.com
|
* @date 2019/4/8 2:07 PM
|
* @Describe 记录操作日志
|
*/
|
@Aspect
|
@Component
|
@Slf4j
|
public class LogApiAspect {
|
|
private String format(String str, Object... objects) {
|
|
return String.format(str, objects);
|
}
|
|
@Around("@annotation(logApi)")
|
public Object doAround(ProceedingJoinPoint point, LogApi logApi) throws Throwable {
|
|
long startTime = System.currentTimeMillis();
|
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
|
Object ob = point.proceed();
|
if (attributes != null) {
|
HttpServletRequest request = attributes.getRequest();
|
StringBuilder methodName = new StringBuilder(point.getSignature().getDeclaringTypeName());
|
methodName.append(".");
|
methodName.append(point.getSignature().getName());
|
StringBuilder message = new StringBuilder("\n");
|
message.append(format("请求者IP : %s\n", IPUtils.getIpAddr(request)));
|
message.append(format("操作内容 : %s\n", (logApi.value().isEmpty()) ? "未定义" : logApi.value()));
|
message.append(format("请求地址 : %s\n", request.getRequestURL().toString()));
|
message.append(format("请求方式 : %s\n", request.getMethod()));
|
message.append(format("请求方法 : %s\n", methodName.toString()));
|
message.append(format("请求参数 : %s\n", Arrays.toString(point.getArgs())));
|
message.append(format("返回对象 : %s\n", JSON.toJSONString(ob)));
|
message.append(format("总共耗时 : %s 毫秒\n", (System.currentTimeMillis() - startTime)));
|
log.info(message.toString());
|
}
|
return ob;
|
}
|
|
}
|