zoukankan      html  css  js  c++  java
  • springboot—日志注解

    作用:

    1.生成文档。这是最常见的,也是java 最早提供的注解。常用的有 @see @param @return 等 
    2..跟踪代码依赖性,实现替代配置文件功能。比较常见的是spring 2.5 开始的基于注解配置。作用就是减少配置。现在的框架基本都使用了这种配置来减少配置文件的数量。
    3.在编译时进行格式检查。如@override 放在方法前,如果你这个方法并不是覆盖了超类方法,则编译时就能检查出。

    常用的元注解:

    @Retention: 只能用于修饰一个Annotation定义,用于指定该Annotation作用范围,或则生命周期?

    参数值赋值后的作用
    RetentionPolicy.CLASS (默认值)给解析器使用的。编译器会把注解记录在class文件中,当运行java程序的时候,JVM不会保留注解。
    RetentionPolicy.RUNTIME 编译器会在注解记录在class文件中,当运行java程序时,JVM会保留注解,程序可以通过反射来获取该注解。
    RetentionPolicy.SOURCE 给编译器使用的。编译器不会将注解记录到class文件中。

    @Target: 用于修饰类的哪个成员。它包含了一个名为value,类型为ElementType的成员变量。用于指定修饰目标对象的类型:TYPE(类、接口)、FIELD(成员变量)、    METHOD(方法)

    @Documented: 用于指定被@Documented修饰的 Annotation 类将被 javadoc 工具提取成文档。使用该元注解修饰,该注解的信息可以生成到javadoc 文档中。

    @Inherited: 如果一个注解使用该元注解修饰,那么某个类使用了这个注解,其子类也会自动继承这个注解。

     

    package com.savingyu.util.aop;
    
    import java.lang.annotation.Documented;
    import java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;
    
    /**
     * 日志注解
     * @author yu
     *
     */
    @Target(ElementType.METHOD)
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    public @interface LoggerManage {
        public String description();
    }
     1 package com.savingyu.util.aop;
     2 
     3 import org.apache.commons.lang3.builder.ToStringBuilder;
     4 import org.aspectj.lang.JoinPoint;
     5 import org.aspectj.lang.annotation.AfterReturning;
     6 import org.aspectj.lang.annotation.AfterThrowing;
     7 import org.aspectj.lang.annotation.Aspect;
     8 import org.aspectj.lang.annotation.Before;
     9 import org.slf4j.Logger;
    10 import org.slf4j.LoggerFactory;
    11 import org.springframework.stereotype.Service;
    12 
    13 /**
    14  * 日志管理:
    15  * @author Administrator
    16  *
    17  */
    18 @Aspect
    19 @Service
    20 public class LoggerAdvice {
    21     protected Logger logger = LoggerFactory.getLogger(this.getClass());
    22     
    23     @Before("within(com.savingyu..*) && @annotation(loggerManage)")
    24     public void addBefoLogger(JoinPoint joinPoint,LoggerManage loggerManage){
    25         logger.info("######################################################");
    26         logger.info("执行"+loggerManage.description()+"开始");
    27         logger.info(joinPoint.getSignature().toString());
    28         logger.info(parseParames(joinPoint.getArgs()));
    29         logger.info("######################################################");
    30     }
    31     
    32     @AfterReturning("within(com.savingyu..*) && @annotation(loggerManage)")
    33     public void addAfterRetruningLogger(JoinPoint joinPoint,LoggerManage loggerManage){
    34         logger.info("执行"+loggerManage.description()+" 结束");
    35     }
    36     
    37     @AfterThrowing(pointcut = "within(com.savingyu..*) && @annotation(loggerManage)",
    38             throwing ="ex")
    39     public void addAfterThrowingLogger(JoinPoint joinPoint,LoggerManage loggerManage,
    40             Exception ex){
    41         logger.error("执行"+loggerManage.description()+" 异常",ex);
    42     }
    43     
    44     private String parseParames(Object[] parames){
    45         if(null == parames || parames.length <= 0 || parames.length>1024){
    46             return "";
    47         }
    48         StringBuffer param = new StringBuffer("传入参数[{}] ");
    49         for(Object obj : parames){
    50             param.append(ToStringBuilder.reflectionToString(obj)).append(" ");
    51         }
    52         return param.toString();
    53     }
    54 }

    第二部分

     

    默认的输出格式:

    2018-08-21 14:34:19.788  INFO 6384 --- [  restartedMain] o.s.j.e.a.AnnotationMBeanExporter        : Unregistering JMX-exposed beans on shutdown
    • 时间日期
    • 日志级别:ERROR、WARM、INFO、DEBUGTorRACE
    • 进程ID
    • 线程名
    • logger名
    • 日志内容

    属性配置:

    在application.properties中

    • spring.output.ansi.enabled:NVER、DETECT、ALWAYS——多彩输出:禁用、默认、总是
    • logging.file:文件输出。设置文件。可以绝对路径、相对路径。
    • logging.path:同上。设置目录。
    • logging.level.*=level:级别控制。*为包名,leve为级别选项:Trace、debug、info、warn、error、fatal、off

      说明:

      1日志文件在10Mb大小时,产生新的日志文件。

      2级别

      logging.level.com.didispace=DEBUGcom.didispace包下所有class以DEBUG级别输出

      logging.level.root=WARN:root日志以WARN级别输出

  • 相关阅读:
    动态规划最大利润的问题
    【转】mysql基础汇总
    mac使用frida
    Mac 下python3 [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed 解决方法
    mac使用jadx逆向app
    python桶排序代码
    requests_html使用asyncio
    async for的使用
    [转载]微信企业号:企业客户的移动应用入口
    微信服务号、订阅号、企业号差别
  • 原文地址:https://www.cnblogs.com/myknow/p/9481040.html
Copyright © 2011-2022 走看看