From 4390db3251c0035c822eb6b6edfb137f85a8fe78 Mon Sep 17 00:00:00 2001 From: "Ray.Hao" <1490493387@qq.com> Date: Thu, 20 Mar 2025 23:58:34 +0800 Subject: [PATCH] =?UTF-8?q?fix(LogAspect):=20=E4=BF=AE=E5=A4=8D=E6=97=A5?= =?UTF-8?q?=E5=BF=97=E5=88=87=E9=9D=A2=E6=96=B9=E6=B3=95=E6=89=A7=E8=A1=8C?= =?UTF-8?q?=E8=80=97=E6=97=B6=E7=BB=9F=E8=AE=A1=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../youlai/boot/core/aspect/LogAspect.java | 46 +++++++++---------- 1 file changed, 21 insertions(+), 25 deletions(-) diff --git a/src/main/java/com/youlai/boot/core/aspect/LogAspect.java b/src/main/java/com/youlai/boot/core/aspect/LogAspect.java index 6094bb56..d8f4bffe 100644 --- a/src/main/java/com/youlai/boot/core/aspect/LogAspect.java +++ b/src/main/java/com/youlai/boot/core/aspect/LogAspect.java @@ -19,10 +19,8 @@ import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.aspectj.lang.JoinPoint; -import org.aspectj.lang.annotation.AfterReturning; -import org.aspectj.lang.annotation.AfterThrowing; -import org.aspectj.lang.annotation.Aspect; -import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.*; import org.springframework.cache.CacheManager; import org.springframework.stereotype.Component; import org.springframework.web.context.request.RequestContextHolder; @@ -61,23 +59,25 @@ public class LogAspect { * * @param joinPoint 切点 */ - @AfterReturning(pointcut = "logPointcut() && @annotation(logAnnotation)", returning = "jsonResult") - public void doAfterReturning(JoinPoint joinPoint, com.youlai.boot.common.annotation.Log logAnnotation, Object jsonResult) { - this.saveLog(joinPoint, null, jsonResult, logAnnotation); + @Around("logPointcut() && @annotation(logAnnotation)") + public Object doAround(ProceedingJoinPoint joinPoint, com.youlai.boot.common.annotation.Log logAnnotation) throws Throwable { + TimeInterval timer = DateUtil.timer(); + Object result = null; + Exception exception = null; + + try { + result = joinPoint.proceed(); + } catch (Exception e) { + exception = e; + throw e; + } finally { + long executionTime = timer.interval(); // 执行时长 + this.saveLog(joinPoint, exception, result, logAnnotation, executionTime); + } + return result; } - /** - * 拦截异常操作 - * - * @param joinPoint 切点 - * @param e 异常 - */ - @AfterThrowing(value = "logPointcut()", throwing = "e") - public void doAfterThrowing(JoinPoint joinPoint, Exception e) { - this.saveLog(joinPoint, e, null, null); - } - /** * 保存日志 * @@ -86,15 +86,11 @@ public class LogAspect { * @param jsonResult 响应结果 * @param logAnnotation 日志注解 */ - private void saveLog(final JoinPoint joinPoint, final Exception e, Object jsonResult, com.youlai.boot.common.annotation.Log logAnnotation) { + private void saveLog(final JoinPoint joinPoint, final Exception e, Object jsonResult, com.youlai.boot.common.annotation.Log logAnnotation, long executionTime) { String requestURI = request.getRequestURI(); - - TimeInterval timer = DateUtil.timer(); - // 执行方法 - long executionTime = timer.interval(); - // 创建日志记录 Log log = new Log(); + log.setExecutionTime(executionTime); if (logAnnotation == null && e != null) { log.setModule(LogModuleEnum.EXCEPTION); log.setContent("系统发生异常"); @@ -129,7 +125,7 @@ public class LogAspect { } } - log.setExecutionTime(executionTime); + // 获取浏览器和终端系统信息 String userAgentString = request.getHeader("User-Agent"); UserAgent userAgent = resolveUserAgent(userAgentString);