diff --git a/dc3-common/dc3-common-core/src/main/java/com/dc3/common/annotation/Logs.java b/dc3-common/dc3-common-core/src/main/java/com/dc3/common/annotation/Logs.java new file mode 100644 index 000000000..ae07df3a1 --- /dev/null +++ b/dc3-common/dc3-common-core/src/main/java/com/dc3/common/annotation/Logs.java @@ -0,0 +1,22 @@ +package com.dc3.common.annotation; + +import java.lang.annotation.*; + +/** + * 日志切点 + * + * @author pnoker + */ +@Documented +@Inherited +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +public @interface Logs { + String value() default ""; + + LogsType type() default LogsType.INFO; + + String tag() default ""; + + boolean save() default false; +} \ No newline at end of file diff --git a/dc3-common/dc3-common-core/src/main/java/com/dc3/common/annotation/LogsAspect.java b/dc3-common/dc3-common-core/src/main/java/com/dc3/common/annotation/LogsAspect.java new file mode 100644 index 000000000..8840a2ed6 --- /dev/null +++ b/dc3-common/dc3-common-core/src/main/java/com/dc3/common/annotation/LogsAspect.java @@ -0,0 +1,41 @@ +package com.dc3.common.annotation; + +import cn.hutool.core.util.IdUtil; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Pointcut; +import org.springframework.stereotype.Component; + +/** + * 日志切片 + * + * @author pnoker + */ +@Slf4j +@Aspect +@Component +public class LogsAspect { + + @Pointcut("@annotation(Logs)") + public void logsCut() { + } + + @Around("logsCut()&&@annotation(logs)") + public Object doAround(ProceedingJoinPoint proceedingJoinPoint, Logs logs) throws Throwable { + String uuid = IdUtil.fastSimpleUUID(); + String className = proceedingJoinPoint.getSignature().getDeclaringType().getSimpleName(); + String methodName = proceedingJoinPoint.getSignature().getName(); + long startTime = System.currentTimeMillis(); + log.info("Start => [{}].[{}.{}]: {}", uuid, className, methodName, logs.value()); + try { + Object proceed = proceedingJoinPoint.proceed(); + log.info("End <= [{}].[{}.{}].[{}ms]: {}", uuid, className, methodName, System.currentTimeMillis() - startTime, logs.value()); + return proceed; + } catch (Throwable throwable) { + log.info("End <= [{}].[{}.{}].[{}ms]: {}", uuid, className, methodName, System.currentTimeMillis() - startTime, logs.value()); + throw throwable; + } + } +} \ No newline at end of file diff --git a/dc3-common/dc3-common-core/src/main/java/com/dc3/common/annotation/LogsType.java b/dc3-common/dc3-common-core/src/main/java/com/dc3/common/annotation/LogsType.java new file mode 100644 index 000000000..46590d88c --- /dev/null +++ b/dc3-common/dc3-common-core/src/main/java/com/dc3/common/annotation/LogsType.java @@ -0,0 +1,10 @@ +package com.dc3.common.annotation; + +/** + * 日志类型 + * + * @author pnoker + */ +public enum LogsType { + INFO, ERROR; +} diff --git a/dc3-common/dc3-common-core/src/main/resources/META-INF/spring.factories b/dc3-common/dc3-common-core/src/main/resources/META-INF/spring.factories index 2dda19eb9..4cfa96f77 100644 --- a/dc3-common/dc3-common-core/src/main/resources/META-INF/spring.factories +++ b/dc3-common/dc3-common-core/src/main/resources/META-INF/spring.factories @@ -4,4 +4,5 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ com.dc3.common.config.RedisTemplateConfig,\ com.dc3.common.config.RedisCacheConfig,\ com.dc3.common.config.ThreadPoolConfig,\ - com.dc3.common.utils.RedisUtil + com.dc3.common.utils.RedisUtil,\ + com.dc3.common.annotation.LogsAspect