aop controller log

aop controller

        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.9.6</version>
        </dependency>
package com.gm.wj.util;

import com.gm.wj.result.ResultFactory;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;

import java.util.Arrays;

@Component
@Aspect
@Slf4j
public class ControllerAspect {

//    @Around("execution(* com.example.writer.controller..*.*(..))")
//    zucc.kinect.controller

    /**
     * 这样 controller 那边是不是就不用管错误 处理了 只要当作返回正确就行了,
     * 错误的话 会在这里返回 那边也不返回
     *
     * @param joinPoint
     * @return
     */
    @Around("execution(* zucc.kinect.controller..*.*(..))")
    public Object record(ProceedingJoinPoint joinPoint) throws Throwable {
        long startTime = System.currentTimeMillis();
//        joinPoint.getArgs().length
        String args = Arrays.toString(joinPoint.getArgs());
//        int argMaxLen=100;
        int argMaxLen = 400;
//        if (args.length() > 1000) {
        if (args.length() > argMaxLen) {
            args = args.substring(0, argMaxLen);
        }
//        log.info("传入参数: " + Arrays.toString(joinPoint.getArgs()));
        log.info("传入参数: " + args);
//        传参 打印太多东西了
        Object result;
        log.info("开始执行 {}.{}", joinPoint.getTarget().getClass(), joinPoint.getSignature().getName());
        try {
            result = joinPoint.proceed();
        } catch (Throwable e) {
            e.printStackTrace();
            return ResultFactory.buildFailResult("失败 "+e.getMessage());
        }
        long endTime = System.currentTimeMillis();
        log.info("方法执行完毕, 共用时:" + (endTime - startTime) + "毫秒");
        return result;
    }


    //定义增强,pointcut连接点使用@annotation(xxx)进行定义
//    @Around(value = "@annotation(around)") //around 与 下面参数名around对应
//    public Object processAuthority(ProceedingJoinPoint point, MyAnnotation around) throws Throwable {
//        long startTime = System.currentTimeMillis();
//        System.out.println("ANNOTATION welcome");
//        System.out.println("ANNOTATION 调用方法:" + around.methodName());
//        System.out.println("ANNOTATION 调用类:" + point.getSignature().getDeclaringTypeName());
//        System.out.println("ANNOTATION 调用类名" + point.getSignature().getDeclaringType().getSimpleName());
//        Object result = point.proceed(); //调用目标方法
//        System.out.println("ANNOTATION login success");
//        long endTime = System.currentTimeMillis();
//        log.info("方法执行完毕, 共用时:" + (endTime - startTime) + "毫秒");
//        return result;
//    }
//————————————————
//    版权声明:本文为CSDN博主「咚咚大帝」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
//    原文链接:https://blog.csdn.net/qq_41981107/article/details/85260765

//    @Around("execution(* com.example.writer.controller..*.*(..))")
//    public Object recordService(ProceedingJoinPoint joinPoint) {
//        long startTime = System.currentTimeMillis();
//        log.info("传入参数: " + Arrays.toString(joinPoint.getArgs()));
//        Object result;
//        log.info("开始执行 {}.{}", joinPoint.getTarget().getClass(),
//                joinPoint.getSignature().getName());
//        try {
//            result = joinPoint.proceed();
//        } catch (UsernameNotFoundException e) {
//            log.error("登录错误, 错误信息: " + e.getMessage());
//            return Result.error(ResultCode.ERROR_LOGIN, e.getMessage());
//        } catch (BusinessException e) {
//            log.error("执行业务错误, 错误信息: " + e.getMessage());
//            return Result.error(e.getResultCode(), e.getMessage());
//        } catch (Throwable throwable) {
//            log.error("其他错误");
//            throwable.printStackTrace();
//            return Result.error(throwable.getMessage());
//        }
//        long endTime = System.currentTimeMillis();
//        log.info("方法执行完毕, 共用时:" + (endTime - startTime) + "毫秒");
//        return result;
//    }
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在SpringMVC中实现日志的AOP封装,可以使用Spring框架提供的AOP(面向切面编程)机制和Log4j或者其他日志框架。 首先需要在Spring的配置文件中开启AOP的支持,例如在xml配置文件中添加以下代码: ``` <aop:aspectj-autoproxy/> ``` 接着定义一个切面类,用于处理日志相关的操作。例如: ``` @Aspect public class LogAspect { private static final Logger LOGGER = Logger.getLogger(LogAspect.class); @Pointcut("execution(* com.example.controller.*.*(..))") public void controllerLog() {} @Around("controllerLog()") public Object logAround(ProceedingJoinPoint joinPoint) throws Throwable { String methodName = joinPoint.getSignature().getName(); String className = joinPoint.getTarget().getClass().getSimpleName(); LOGGER.info("Entering " + className + "." + methodName + "() with arguments: " + Arrays.toString(joinPoint.getArgs())); Object result = joinPoint.proceed(); LOGGER.info("Exiting " + className + "." + methodName + "() with result: " + result); return result; } } ``` 在上面的代码中,`@Aspect`注解表示这是一个切面类,`@Pointcut`注解定义了切入点,即对哪些方法进行日志记录,这里对所有Controller类中的所有方法进行切入。`@Around`注解表示在切入点前后执行的操作,这里分别记录方法的入参和返回值。 最后,在Spring的配置文件中将切面类注册到容器中,例如: ``` <bean id="logAspect" class="com.example.aspect.LogAspect"/> ``` 这样,每次调用Controller的方法时,就会自动记录日志了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值