首页 > 其他分享 >自定义注解+aop做日志记录

自定义注解+aop做日志记录

时间:2022-09-02 17:36:35浏览次数:42  
标签:String 自定义 public aop 注解 日志 CommitLog

自定义一个注解:

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface CommitLog {

    /**
     * 类型名称
     * @return
     */
    String typeName() ;

    /**
     * 方法操作类型
     * @return
     */
    String methodName();
}

  

定义一个日志切面,写入日志信息:

/**
 * 日志切面
 */
@Aspect
@Slf4j
@Component
public class LogAspect {

    //切点
    @Pointcut("@annotation(com.example.demo3.log.CommitLog)")
    public void PointCut(){

    }

    @Around("LogAspect.PointCut()")
    public Object methodLogAround(ProceedingJoinPoint  proceedingJoinPoint)  {

        MethodSignature signature = (MethodSignature)proceedingJoinPoint.getSignature();

        Method method = signature.getMethod();
        String className = method.getDeclaringClass().getName();// 类名称
        String methodName = method.getName(); // 方法名称
        Object[] args = proceedingJoinPoint.getArgs();//参数

        // 获取注解信息
        CommitLog commitLog=method.getAnnotation(CommitLog.class);
        String key = commitLog.codeKey();
        String type = commitLog.type();
        // 调用前
        log.info("类名称:{},方法名称{},入参{},注解信息{}",className,methodName,args,commitLog);

        try {
            Object proceed = proceedingJoinPoint.proceed(args);
        } catch (Throwable e) {
          //  e.printStackTrace();
            log.info("切面异常");
        }

        // 调用后
        log.info("调用前");
        //
        //数据库写入
        logMapper.insert(logInfo);

        return new Object();
    }

}

 

提供对外接口,并使用自定义注解:

@Controller
public class UserController {

    @GetMapping("/update")
    @CommitLog(codeKey = "key1",type = "update")
    public void update(){

        System.out.println("1234567890");
    }

    @GetMapping("/select")
    @CommitLog(codeKey = "key2",type = "select")
    public void select(){

        System.out.println("1234567890");
    }
}

  

 

 

标签:String,自定义,public,aop,注解,日志,CommitLog
From: https://www.cnblogs.com/dhdnm/p/16650648.html

相关文章

  • springboot 自定义注解拦截器
    参考:https://blog.csdn.net/mxlgslcd/article/details/89155315第一步:自定义注解@Target(ElementType.METHOD)//可用在方法名上@Retention(RetentionPolicy.RUNTIME)/......
  • 基于函数计算自定义运行时快速部署一个 springboot 项目 什么是函数计算?
    什么是函数计算?函数计算是事件驱动的全托管计算服务。使用函数计算,您无需采购与管理服务器等基础设施,只需编写并上传代码。函数计算为您准备好计算资源,弹性地可靠地运行任......
  • elementui对于vue表单自定义校验
    在<el-form-itemlabel="原因"prop="reson":rules="条件==值?[{required:true,message:'原因不能为空',trigger:'blur'}]:[{requ......
  • 使用 CSS 自定义鼠标光标
    使用CSS自定义鼠标光标你好,互联网上令人惊叹的人。希望你们都做得很好。在本文中,我们将讨论CSS光标属性。我们将在这里看到有多少类型的值与可用的游标属性相关联。......
  • 自定义分页器
    自定义分页器针对上一小节批量插入的数据,我们在前端展示的时候发现一个很严重的问题,一页展示了所有的数据,数据量太大,查看不方便针对数据量大但又需要全部展示给用户观看......
  • 阿里云logtail采集容器内日志到sls导致容器内存增加
    现象nginx容器接入logtail后,因为服务请求量较大导致日志量快速增加,很快就触发了内存告警,甚至触发容器伸缩查看内存使用如图所示(单位:GB,统计参数:container_memory_working......
  • Flask 学习-35.restful-full 自定义错误内容 error_msg 使用
    前言当接口请求参数不合法的,可以给前端返回报错原因,给个友好的返回消息,在add_argument()中可以通过help参数来定义错误信息每个字段的错误消息可以使用help参数(Requ......
  • Flask 学习-34.restful-full 请求参数自定义参数校验类型 (reqparse.RequestParser()
    前言在校验请求参数的时候,除了一些基本的required=True,type类型外,还会遇到一些校验,比如是否为空,字符串长度,以及一些自定义的参数规则。add_argument参数下面是add_arg......
  • Windows下Conda自定义env安装目录
    楔子windows下,conda会将新的环境安装到%USERFROFILE%/.cond/envs下,但是到后来清理C盘的时候,就想着如何将这个envs搬到D盘我将envs移动到D盘后,然后将C盘的envs删除了,然......
  • MariaDB配置日志审计
    MariaDB配置日志审计1.确认日志审计插件首先确认插件路径,执行下列SQL确认:MariaDB[(none)]>SHOWGLOBALVARIABLESLIKE'plugin_dir';+---------------+------------......