首页 > 其他分享 >采用自定义注解 和 AOP 完成日志记录

采用自定义注解 和 AOP 完成日志记录

时间:2024-04-10 16:33:31浏览次数:26  
标签:info log 自定义 joinPoint AOP 注解 日志 ElementType public

1、声明一个自定义注解

@Retention 注解包含一个 RetentionPolicy 类型的属性 value,用于指定注解的保留策略,常用的保留策略包括:

RetentionPolicy.SOURCE:表示注解仅在源代码中保留,编译器编译时会将其忽略,不会保存在编译后的字节码中。
RetentionPolicy.CLASS:表示注解在编译后的字节码中保留,但在运行时不会被加载到 JVM 中。这是默认的保留策略。
RetentionPolicy.RUNTIME:表示注解在编译后的字节码中保留,并在运行时被加载到 JVM 中

@Target 注解包含一个 ElementType[] 类型的属性 value,用于指定注解可以应用到的元素类型。常用的元素类型包括:

ElementType.TYPE:表示该注解可以应用到类、接口、枚举、注解类型等上。
ElementType.FIELD:表示该注解可以应用到字段上。
ElementType.METHOD:表示该注解可以应用到方法上。
ElementType.PARAMETER:表示该注解可以应用到方法参数上。
ElementType.CONSTRUCTOR:表示该注解可以应用到构造方法上。
ElementType.LOCAL_VARIABLE:表示该注解可以应用到局部变量上。
ElementType.ANNOTATION_TYPE:表示该注解可以应用到注解类型上。
ElementType.PACKAGE:表示该注解可以应用到包上。

@Retention(RetentionPolicy.RUNTIME) // 一般在采用自定义注解的时候使用此类型
@Target(ElementType.METHOD)  // 此注解使用在方法上
public @interface DhMonsterLog {

}

2、声明一个切面类

@Component
@Aspect
@Slf4j
public class DhMonsterLogAspect {

    @Pointcut("@annotation(com.dh.annotation.DhMonsterLog)")
    public void LogAspect(){}
    // 切面进入之前会执行
    @Before("LogAspect()")
    public void beforePkhLog(JoinPoint joinPoint) {
        ServletRequestAttributes requestAttributes =
                (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = requestAttributes.getRequest();

        String methodName = joinPoint.getSignature().getName();
        log.info("========================================= Method " + methodName + "() begin=========================================");
        // 执行时间
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date d= new Date();
        String time = sdf.format(d);
        log.info("Time           : " + time);
        // 打印请求 URL
        log.info("URL            : " + request.getRequestURL());
        // 打印 请求方法
        log.info("HTTP Method    : " + request.getMethod());
        // 打印controller 的全路径以及执行方法
        log.info("Class Method   : " + joinPoint.getSignature().getDeclaringTypeName() + "." + methodName);
        // 打印请求的 IP
        log.info("IP             : " + request.getRemoteHost());
        // 打印请求入参
        log.info("Request Args   : " + JSON.toJSONString(joinPoint.getArgs()));
        log.info("Executing Controller...");
    }

    @After("LogAspect()") //切面进入之后会执行
    public void afterPkhLog(JoinPoint joinPoint) {
        String methodName = joinPoint.getSignature().getName();
        log.info("========================================= Method " + methodName + "() End =========================================");
    }
}

3、接口调用

    @RequestMapping("/list")
    @DhMonsterLog  //自定义的注解
    public List<Object> list(String param) {

       。。。。。。。。

    }

标签:info,log,自定义,joinPoint,AOP,注解,日志,ElementType,public
From: https://blog.csdn.net/m0_61200771/article/details/137600341

相关文章

  • 日志脱敏更加优雅性能更好,远超正则。支持 logback+log4j2 插件
    项目介绍日志脱敏是常见的安全需求。普通的基于工具类方法的方式,对代码的入侵性太强,编写起来又特别麻烦。sensitive项目提供基于注解的方式,并且内置了常见的脱敏方式,便于开发。支持logback和log4j2等常见的日志脱敏插件。日志插件解决正则匹配长文本可能出现的回溯......
  • java switch 自定义表格的渲染和编辑示例
    目录正常使用表格自定义表格样式正常使用表格很简单,使用一次就知道了,不过多介绍。//创建JTable实例,使用默认的模型JTabletable=newJTable();//设置表格数据Object[][]data={ {1,"Apple",10.0}, {2,"Banana",5.0}, {3,"Orange",8.0}};Object[]col......
  • C# 实现log日志系统的方法
    开发需要,实现一个简单日志系统,废话不多说,直接上代码。以下基于winform实现。首先nuget安装Nlog。不会使用nuget自行百度。1usingNLog;23namespaceLogDemo4{5publicpartialclassForm1:Form6{7privatestaticLoggerlogger=LogM......
  • 【Spring】-Spring 之AOP注解
    目录Spring之AOP注解AOP思想:AOP的使用场景:@Aspect的使用以及基本概念:1.切面类2.切点@Pointcut3.Advice,4.JoinPoint:5.使用&&、||、!、三种运算符来组合切点表达式,表示与或非的关系;6.@annotation(annotationType)匹配指定注解为切入点的方法;具体代码实现:Spring之AOP注解A......
  • CAD学习日志-005
    自学过程很苦恼,遇到什么问题都要去搜索,生怕自己误入歧途,求解有什么学习的心态。以下是一些摸索的很基础很常见的一些操作。一、CAD图案填充1.英文输入法下H+空格出现图案填充界面如下;2.选好填充样式,然后直接选拾取点过去会出现一片白,如下;3.但是放大后,还是可以看出图案的,......
  • CMD 批处理脚本自定义 UEFI 启动项,您需要使用 bcdedit 命令来操作 Windows 引导管理器
    CMD批处理脚本自定义UEFI启动项,您需要使用bcdedit命令来操作Windows引导管理器(BootConfigurationData,BCD)。BCD存储了计算机启动时所需的信息,包括可用的操作系统和启动选项。以下是一个简单的示例,演示如何使用CMD批处理脚本添加、修改和删除启动项:1.添加启动项要添......
  • 【Edu-Web开发日志三——首页制作三】
    首页制作三Main办学项目布局设计目标效果图布局设计办学项目导航栏文字标题跳转链接合并四个小卡片基础设置进阶特效大卡片最终效果图Edu-Web系列开发日志目录Edu-Web开发日志一——首页制作一Edu-Web开发日志二——首页制作二Main办学项目布局设计目标效果图......
  • springboot3使用自定义注解+AOP+redis优雅实现防重复提交
     ⛰️个人主页:   蒾酒......
  • 专项技能训练五《云计算网络技术与应用》实训5-5:Docker用户自定义网络配置
    文章目录Docker用户自定义网络配置1.使用VMware安装CentOS7虚拟机,安装时需添加多一张网卡,该网卡为自定义-VMnet1.并且记得开启CPU虚拟化,将其命名为“Docker”。2.安装完虚拟机后,进入虚拟机,修改网络配置(onboot改为yes)并重启网络服务,查看相应IP地址,并使用远程连接软件进......
  • Spring AOP 技术详解
    学完AOP技术,真的不得不佩服发明AOP技术的人,真是个天才!!!想要了解AOP,首先要了解什么叫代理。1.代理我们先来说说什么叫做代理:        假如我要买辆奥迪A7,我不会直接去长春一汽工厂去买,为啥?路途远,而且,如果以这样方式购买,一手交钱,一手交车,事先没人给我介绍车辆配置情况......