一、导包
org.aspectj
aspectjrt
1.8.12
org.aspectj
aspectjweaver
1.9.4
一、在启动类上进行注解自动扫描
@SpringBootApplication
@EnableCaching
@EnableAsync
@ComponentScan({"com.workorder.*"})
public class WorkOrderApplication {
public static void main(String[] args) {
SpringApplication.run(WorkOrderApplication.class, args);
}
}
三、工具类
@Aspect
@Component
@Slf4j
public class LogAspect {
@Autowired
private Environment env;
@Pointcut("execution(public * com.workorder..controller..*.*(..))")
public void logPointCut()
{}
@Around("logPointCut()")
public Object around(ProceedingJoinPoint point) throws Throwable {
log.info("=========================================");
long beginTime = System.currentTimeMillis();
//执行方法
Object result = point.proceed();
//执行时长(毫秒)
long time = System.currentTimeMillis() - beginTime;
//保存日志
saveSysLog(point, time);
return result;
}
private void saveSysLog(ProceedingJoinPoint joinPoint, long time) {
// 接收到请求,记录请求内容
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = attributes.getRequest();
String logStr="";
if (isEnvironment("dev")){
String requestUrl = request.getRequestURL().toString() + "?";
//获取所有参数方法
Enumeration enu=request.getParameterNames();
while(enu.hasMoreElements()){
String paraName = enu.nextElement();
requestUrl+=paraName + "=" + request.getParameter(paraName) + "&";
}
logStr+="rn请求地址:"+ requestUrl.substring(0,requestUrl.length()-1);
}
//请求的参数
Object[] args = joinPoint.getArgs();
String params = JSONUtil.toJsonStr(args);
logStr+="rn请求方式:"+ request.getMethod();
logStr+="rn请求方法Token:"+ request.getHeader("token");
logStr+="rn请求参数:"+ params;
logStr+="rnIP:"+ request.getRemoteAddr();
logStr+="rn响应时间:"+ time+" ms";
log.info(logStr);
}
private boolean isEnvironment(String str) {
boolean flag = false;
String[] arr = env.getActiveProfiles();
List list = Arrays.asList(arr);
if (list.contains(str)) {
flag = true;
}
return flag;
}
}
四、结果