• AOP实现日志记录方法参数与返回值


    1、annotation

    /**
     * 自动打印方法周边信息,包括参数,返回值,等等
     */
    @Retention(RetentionPolicy.RUNTIME)
    @Target(ElementType.METHOD)
    public @interface LogMethod {
    }
    

    2、aspect

    @Aspect
    @Slf4j
    @Component
    public class LogMethodAspect {
    
        @Pointcut("@annotation(cn.***.aspect.annotation.LogMethod)")
        public void logMethodAnnotation() {
        }
    
        @Around("logMethodAnnotation() && @annotation(logMethod)")
        public Object sysExceptionCatchAndProcess(ProceedingJoinPoint joinPoint, LogMethod logMethod) throws Throwable {
            this.logBeforeProceed(joinPoint, logMethod);
            Object result = joinPoint.proceed();
            this.logAfterProceed(joinPoint, logMethod, result);
            return result;
        }
    
        private void logBeforeProceed(ProceedingJoinPoint joinPoint, LogMethod logMethod) {
            StringBuilder logBuilder = new StringBuilder();
            // 方法
            MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
            logBuilder.append("方法参数日志。方法:");
            this.appendMethodPath(logBuilder, methodSignature);
            // 参数名,参数值
            String[] argNames = methodSignature.getParameterNames();
            Object[] args = joinPoint.getArgs();
            if (args != null && args.length > 0) {
                logBuilder.append("参数:");
            }
            for (int i = 0; i < argNames.length; i++) {
                logBuilder.append(argNames[i]).append("=").append(JSONObject.toJSONString(args[i]));
            }
            log.debug(logBuilder.toString());
    
        }
    
        private void logAfterProceed(ProceedingJoinPoint joinPoint, LogMethod logMethod, Object result) {
            StringBuilder logBuilder = new StringBuilder();
            // 方法
            MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
            logBuilder.append("方法返回日志。方法:");
            this.appendMethodPath(logBuilder, methodSignature);
            logBuilder.append("返回=").append(JSONObject.toJSONString(result));
            log.debug(logBuilder.toString());
        }
    
        private void appendMethodPath(StringBuilder stringBuilder, MethodSignature methodSignature) {
            stringBuilder.append(methodSignature.getMethod().getDeclaringClass().toString())
                    .append(".")
                    .append(methodSignature.getMethod().getName())
                    .append(" ");
        }
    }
    
  • 相关阅读:
    043_生成随机密码
    042_提示用户输入年份后测试判断是否为闰年
    041_查找 Linux 系统中的僵尸进程
    040_删除某个目录下大小为 0 的文件
    039_显示 CPU 厂商信息
    038_使用脚本自动创建逻辑卷
    037_自动添加防火墙规则,开启某些服务或端口(适用于 RHEL7)
    bzoj1537
    bzoj2466
    bzoj1047
  • 原文地址:https://www.cnblogs.com/tuofan/p/14149226.html
Copyright © 2020-2023  润新知