1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- package com.simuwang.deploy.components;
- import cn.hutool.core.exceptions.ExceptionUtil;
- import cn.hutool.core.util.StrUtil;
- import cn.hutool.core.util.URLUtil;
- import cn.hutool.json.JSONUtil;
- import com.simuwang.base.common.util.ServletUtils;
- import com.simuwang.logging.Logging;
- import com.simuwang.logging.LoggingService;
- import com.simuwang.logging.SystemLog;
- import jakarta.servlet.http.HttpServletRequest;
- import org.aspectj.lang.ProceedingJoinPoint;
- import org.aspectj.lang.annotation.Around;
- import org.aspectj.lang.annotation.Aspect;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.aop.support.AopUtils;
- import org.springframework.core.annotation.Order;
- import org.springframework.util.StopWatch;
- import java.util.Objects;
- /**
- * @author wangzaijun
- * @date 2024/9/14 14:07
- * @description 系统日志拦截切面
- */
- @Order(2)
- @Aspect
- public class LoggingAspect {
- private final Logger logger = LoggerFactory.getLogger(this.getClass());
- private final LoggingService service;
- public LoggingAspect(LoggingService service) {
- this.service = service;
- }
- @Around("@annotation(annotation)")
- public Object around(ProceedingJoinPoint joinPoint, SystemLog annotation) throws Throwable {
- Class<?> clazz = AopUtils.getTargetClass(joinPoint.getTarget());
- SystemLog systemLog = clazz.getAnnotation(SystemLog.class);
- String title = annotation.value();
- if (systemLog != null && StrUtil.isNotBlank(systemLog.value())) {
- title = systemLog.value() + "-" + title;
- }
- HttpServletRequest request = ServletUtils.getRequest();
- Logging.Builder builder = Logging.builder().title(title).type(annotation.type().getValue()).method(request.getMethod())
- .requestUri(URLUtil.getPath(request.getRequestURI())).remoteAddr(ServletUtils.getIpAddr(request))
- .params(joinPoint.getArgs() == null ? Objects.toString(request.getParameterMap()) : JSONUtil.toJsonStr(joinPoint.getArgs()));
- StopWatch watch = new StopWatch();
- watch.start();
- Object result;
- try {
- result = joinPoint.proceed();
- if (annotation.saveResult()) {
- builder.result(JSONUtil.toJsonStr(result));
- }
- } catch (Throwable throwable) {
- builder.exception(ExceptionUtil.stacktraceToString(throwable));
- builder.hasException(true);
- throw throwable;
- } finally {
- watch.stop();
- builder.executeTime(watch.getTotalTimeMillis());
- Logging logging = builder.build();
- try {
- this.service.asyncSave(logging);
- } catch (Exception e) {
- this.logger.warn("请求{} 日志保存报错\n{}", logging, ExceptionUtil.stacktraceToString(e));
- }
- }
- return result;
- }
- }
|