From f371fda3489cca9e39729bc3ef238264e857626f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E5=8A=9B?= Date: Sat, 2 Apr 2022 13:45:53 +0800 Subject: [PATCH] fix loggging --- .../com/canvas/web/utils/RequestHolder.java | 14 +++++ .../com/canvas/web/utils/SpringSUtiles.java | 4 ++ .../com/canvas/web/utils/SpringUtils.java | 8 +++ .../com/canvas/web/utils/ThrowableUtil.java | 17 +++++ .../web/modules/logging/aspect/LogAspect.java | 62 +++++++++++++++++++ 5 files changed, 105 insertions(+) create mode 100644 common/src/main/java/com/canvas/web/utils/RequestHolder.java create mode 100644 common/src/main/java/com/canvas/web/utils/SpringSUtiles.java create mode 100644 common/src/main/java/com/canvas/web/utils/ThrowableUtil.java diff --git a/common/src/main/java/com/canvas/web/utils/RequestHolder.java b/common/src/main/java/com/canvas/web/utils/RequestHolder.java new file mode 100644 index 0000000..08b3816 --- /dev/null +++ b/common/src/main/java/com/canvas/web/utils/RequestHolder.java @@ -0,0 +1,14 @@ +package com.canvas.web.utils; + +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.servlet.http.HttpServletRequest; +import java.util.Objects; + +public class RequestHolder { + + public static HttpServletRequest getHttpServletRequest(){ + return ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest(); + } +} diff --git a/common/src/main/java/com/canvas/web/utils/SpringSUtiles.java b/common/src/main/java/com/canvas/web/utils/SpringSUtiles.java new file mode 100644 index 0000000..5aca7fd --- /dev/null +++ b/common/src/main/java/com/canvas/web/utils/SpringSUtiles.java @@ -0,0 +1,4 @@ +package com.canvas.web.utils; + +public class SpringSUtiles extends org.apache.commons.lang3.StringUtils{ +} diff --git a/common/src/main/java/com/canvas/web/utils/SpringUtils.java b/common/src/main/java/com/canvas/web/utils/SpringUtils.java index 85411e0..a7d92d1 100644 --- a/common/src/main/java/com/canvas/web/utils/SpringUtils.java +++ b/common/src/main/java/com/canvas/web/utils/SpringUtils.java @@ -1,5 +1,7 @@ package com.canvas.web.utils; + + import org.springframework.aop.framework.AopContext; import org.springframework.beans.BeansException; import org.springframework.beans.factory.NoSuchBeanDefinitionException; @@ -7,6 +9,8 @@ import org.springframework.beans.factory.config.BeanFactoryPostProcessor; import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; import org.springframework.stereotype.Component; +import javax.servlet.http.HttpServletRequest; + @Component public class SpringUtils implements BeanFactoryPostProcessor { @@ -53,4 +57,8 @@ public class SpringUtils implements BeanFactoryPostProcessor { public static T getAopProxy(T invoker) { return (T) AopContext.currentProxy(); } + + + + } diff --git a/common/src/main/java/com/canvas/web/utils/ThrowableUtil.java b/common/src/main/java/com/canvas/web/utils/ThrowableUtil.java new file mode 100644 index 0000000..4788028 --- /dev/null +++ b/common/src/main/java/com/canvas/web/utils/ThrowableUtil.java @@ -0,0 +1,17 @@ +package com.canvas.web.utils; + +import java.io.PrintWriter; +import java.io.StringWriter; + +public class ThrowableUtil { + + + //获取堆栈信息 + public static String getStackTrace(Throwable throwable){ + StringWriter sw= new StringWriter(); + try(PrintWriter pw =new PrintWriter(sw)){ + throwable.printStackTrace(pw); + return sw.toString(); + } + } +} diff --git a/system/src/main/java/com/canvas/web/modules/logging/aspect/LogAspect.java b/system/src/main/java/com/canvas/web/modules/logging/aspect/LogAspect.java index 08f1d2a..73023a8 100644 --- a/system/src/main/java/com/canvas/web/modules/logging/aspect/LogAspect.java +++ b/system/src/main/java/com/canvas/web/modules/logging/aspect/LogAspect.java @@ -1,15 +1,77 @@ package com.canvas.web.modules.logging.aspect; +import com.canvas.web.modules.logging.domain.Log; +import com.canvas.web.modules.logging.service.LogService; +import com.canvas.web.utils.RequestHolder; +import com.canvas.web.utils.SecurityUtils; +import com.canvas.web.utils.StringUtils; +import com.canvas.web.utils.ThrowableUtil; import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.AfterThrowing; +import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Pointcut; import org.springframework.stereotype.Component; +import javax.servlet.http.HttpServletRequest; + @Component @Aspect @Slf4j public class LogAspect { + private final LogService logService; + + ThreadLocal currentTime = new ThreadLocal<>(); + + public LogAspect(LogService logService){ + this.logService=logService; + } + + //切入点 + @Pointcut("@annotation(com.canvas.web.modules.logging.annotation.Log)") + public void logPointcut(){ + + } + + + //配置环绕通知 + @Around("logPointcut()") + public Object logAround(ProceedingJoinPoint joinPoint) throws Throwable{ + Object result; + currentTime.set(System.currentTimeMillis()); + result=joinPoint.proceed(); + Log log=new Log("INFO",System.currentTimeMillis() - currentTime.get()); + currentTime.remove(); + HttpServletRequest request= RequestHolder.getHttpServletRequest(); + logService.save(getUsername(), StringUtils.getBrowser(request),StringUtils.getIp(request),joinPoint,log); + return result; + } + + + //配置异常通知 + @AfterThrowing(pointcut = "logPointcut()", throwing = "e") + public void logAfterThrowing(JoinPoint joinPoint, Throwable e){ + Log log=new Log("ERROR",System.currentTimeMillis() - currentTime.get()); + currentTime.remove(); + log.setExceptionDetail(ThrowableUtil.getStackTrace(e).getBytes()); + HttpServletRequest request = RequestHolder.getHttpServletRequest(); + logService.save(getUsername(), StringUtils.getBrowser(request), StringUtils.getIp(request), (ProceedingJoinPoint)joinPoint, log); + } + + + + public String getUsername(){ + try{ + return SecurityUtils.getCurrentUsername(); + }catch (Exception e){ + return ""; + } + } + }