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; } }