zoukankan      html  css  js  c++  java
  • mylog 自定义注解打印 logger

    使用AOP 自动打印方法进出, 耗时 logger

    依赖:

       <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-devtools</artifactId>
                <optional>true</optional>
       </dependency>
    
      <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-aop</artifactId>
       </dependency>

    注解:

    /**
     * *************************************************************************
     * <PRE>
     *  @ClassName:    : Mylog 
     *
     *  @Description:    : 自定义注解, 实现对方法的进 出 ,运行时间 打印logger,
     *
     *  @Creation Date   : 8 Aug 2019 3:02:36 PM
     *
     *  @Author          :  Sea
     *  
     *
     * </PRE>
     **************************************************************************
     */
    @Target({ElementType.METHOD})
    @Retention(RetentionPolicy.RUNTIME)
    public @interface Mylog { 
        String value() default "";
    }

    切片:

    @Aspect
    @Component
    public class MylogAspect {
    
        private static Logger logger = LoggerFactory.getLogger(MylogAspect.class);
    
    
        @Around("@annotation(Mylog)") // 作用到注释@Mylog标记的方法上
        public Object handleSeaAnnotionAOPMethod(ProceedingJoinPoint joinPoint, Mylog Mylog) throws Throwable {
    
            long start = System.currentTimeMillis();
            // 获取方法的 全类名 com.sea.controller.XXXcontroller.getdate()
            MethodSignature signature = (MethodSignature) joinPoint.getSignature();
            String className = signature.getDeclaringType().getSimpleName();
    
            // 获取注解作用方法名 eg:getdata
            String methodName = joinPoint.getSignature().getName();
    
            // 获取方法--
    //                 Method method = joinPoint.getTarget().getClass().getMethod(methodName, signature.getParameterTypes());
    //                 Method method = getMethod(joinPoint);
    
            logger.info("&&&&&& enter into the class {} -> method {} &&&&&&", className, methodName);
    
            // ################################################################
            Object object = joinPoint.proceed();
    
            System.err.println(className);
            long end = System.currentTimeMillis();
            logger.info("&&&&&& end  the class {} -> method {} &&&&&&", className, methodName);
            logger.info(" ^^^^^^^^^run the  method {} total cost time : {}  ms ^^^^^^^^",methodName, (end - start));
            return object;
        }}

    Test:

        @GetMapping("/get")
        @Mylog
         public String getData() {
            
            
             return "nihao"+ UUID.randomUUID();
        }
        

    结果:  .....

  • 相关阅读:
    智能指针和二叉树(2):资源的自动管理
    c++智能指针和二叉树(1): 图解层序遍历和逐层打印二叉树
    QLineEdit拾遗:数据的过滤、验证和补全
    为Qt视图中的文字添加彩虹渐变效果
    python3的变量作用域规则和nonlocal关键字
    三种方法为QLineEdit添加清除内容按钮
    配置CLion作为Qt5开发环境
    c++随机排序容器中的元素
    c++性能测试工具:google benchmark入门(一)
    shared_ptr和动态数组
  • 原文地址:https://www.cnblogs.com/lshan/p/11359712.html
Copyright © 2011-2022 走看看