【Spring】SpringAop给所有Service增加日志

java 复制代码
@Component
@Aspect
@Slf4j
public class ServiceLogAop {

    @Pointcut("within(@org.springframework.stereotype.Service *)")
    public void serviceMethods() {
    }

    @Before(value = "serviceMethods()")
    public void logMethodEntry(JoinPoint joinPoint) {
        String className = joinPoint.getTarget().getClass().getSimpleName();
        String methodName = joinPoint.getSignature().getName();
        Object[] args = joinPoint.getArgs();

        if (args.length != 0) {
            try {
                log.info("========ServiceLog==Param======: " + className + "." + methodName + " with arguments: " + JSON.toJSONString(args));
            } catch (Exception e) {
                log.info("========ServiceLog==Param======: " + className + "." + methodName + " with arguments: " + Arrays.toString(args));
            }
        }
    }

    @AfterReturning(value = "serviceMethods()", returning = "result")
    public void logMethodExit(JoinPoint joinPoint, Object result) {
        String className = joinPoint.getTarget().getClass().getSimpleName();
        String methodName = joinPoint.getSignature().getName();
        Object[] args = joinPoint.getArgs();

        if (args.length != 0) {
            try {
                log.info("========ServiceLog==result======: " + className + "." + methodName + " with result: " + JSON.toJSONString(result));
            } catch (Exception e) {
                log.info("========ServiceLog==result======: error");
            }
        }
    }
}

其他的如controller同理

java 复制代码
@Pointcut("within(@org.springframework.stereotype.Service *) || within(@org.springframework.stereotype.Controller *)")

还可以排除

java 复制代码
@Pointcut("within(@org.springframework.stereotype.Service *) && !execution(* springfox.documentation.schema.property.*.*(..))")
相关推荐
Java中文社群29 分钟前
重要:Java25正式发布(长期支持版)!
java·后端·面试
每天进步一点_JL2 小时前
JVM 类加载:双亲委派机制
java·后端
用户298698530142 小时前
Java HTML 转 Word 完整指南
java·后端
渣哥2 小时前
原来公平锁和非公平锁差别这么大
java
渣哥2 小时前
99% 的人没搞懂:Semaphore 到底是干啥的?
java
J2K3 小时前
JDK都25了,你还没用过ZGC?那真得补补课了
java·jvm·后端
kfyty7253 小时前
不依赖第三方,不销毁重建,loveqq 框架如何原生实现动态线程池?
java·架构
isysc14 小时前
面了一个校招生,竟然说我是老古董
java·后端·面试
道可到7 小时前
Java 反射现代实践速查表(JDK 11+/17+)
java
道可到8 小时前
Java 反射现代实践指南(JDK 11+ / 17+ 适用)
java