@Aspect
@Component
public class WebLogAspect {
public static boolean hasRes=false;
private static final String USER="anonymousUser";
private Logger logger = LoggerFactory.getLogger(WebLogAspect.class);
@Pointcut("execution(public * com.xx.controller..*.*(..))")
public void webLog() {
}
@Around("webLog()")
public Object doAround(ProceedingJoinPoint joinPoint) throws Throwable {
Object result = new Object();
String name = "佚名用户";
// 接收到请求,记录请求内容
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
if (attributes != null) {
HttpServletRequest request = attributes.getRequest();
SecurityContext ctx = SecurityContextHolder.getContext();
Authentication auth = ctx.getAuthentication();
if (auth != null && !Objects.equals(USER, auth.getPrincipal())) {
name = (String) auth.getPrincipal();
}
if (request != null) {
Date startTime = new Date();
String url = request.getRequestURL().toString();
StringBuffer stringBuffer = new StringBuffer();
String ip = request.getRemoteAddr();
stringBuffer.append("{userName:" + name + ",url:" + url + ",parmas:{");
Signature signature = joinPoint.getSignature();
MethodSignature methodSignature = (MethodSignature) signature;
String[] strings = methodSignature.getParameterNames();
Object[] objects = joinPoint.getArgs();
for (int i = 0; i < objects.length; i++) {
stringBuffer.append(strings[i] + ":" + objects[i] + ",");
}
stringBuffer.replace(stringBuffer.length() - 1, stringBuffer.length(), "}}");
String logs = stringBuffer.toString();
try {
logger.info(logs);
result = joinPoint.proceed();
if(hasRes){
String response = JSONObject.toJSONString(result);
logger.info("请求结束===返回值={}:" + response);
}
Date endTime = new Date();
logger.info("请求开始时间:"+ DateTimeUtil.date2LongString(startTime)+";请求结束时间:"+ DateTimeUtil.date2LongString(endTime));
} catch (Exception e) {
result = new BaseResult();
BaseResult tmp = ((BaseResult) result);
tmp.setStatus(0);
tmp.setMsg("系统异常");
logger.error(logs, e);
}
}
} else {
result = joinPoint.proceed();
}
return result;
}
}
spring aop对请求接口拦截,打印请求日志
最新推荐文章于 2022-08-20 20:48:11 发布