springboot—日誌註解

做用:java

1.生成文檔。這是最多見的,也是java 最先提供的註解。經常使用的有 @see @param @return 等 
2..跟蹤代碼依賴性,實現替代配置文件功能。比較常見的是spring 2.5 開始的基於註解配置。做用就是減小配置。如今的框架基本都使用了這種配置來減小配置文件的數量。
3.在編譯時進行格式檢查。如@override 放在方法前,若是你這個方法並非覆蓋了超類方法,則編譯時就能檢查出。spring

經常使用的元註解:apache

@Retention: 只能用於修飾一個Annotation定義,用於指定該Annotation做用範圍,或則生命週期?app

參數值 賦值後的做用
RetentionPolicy.CLASS (默認值)給解析器使用的。編譯器會把註解記錄在class文件中,當運行java程序的時候,JVM不會保留註解。
RetentionPolicy.RUNTIME 編譯器會在註解記錄在class文件中,當運行java程序時,JVM會保留註解,程序能夠經過反射來獲取該註解。
RetentionPolicy.SOURCE 給編譯器使用的。編譯器不會將註解記錄到class文件中。

@Target: 用於修飾類的哪一個成員。它包含了一個名爲value,類型爲ElementType的成員變量。用於指定修飾目標對象的類型:TYPE(類、接口)、FIELD(成員變量)、    METHOD(方法)框架

@Documented: 用於指定被@Documented修飾的 Annotation 類將被 javadoc 工具提取成文檔。使用該元註解修飾,該註解的信息能夠生成到javadoc 文檔中。ide

@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中ui

  • spring.output.ansi.enabled:NVER、DETECT、ALWAYS——多彩輸出:禁用、默認、老是
  • logging.file:文件輸出。設置文件。能夠絕對路徑、相對路徑。
  • logging.path:同上。設置目錄。
  • logging.level.*=level:級別控制。*爲包名,leve爲級別選項:Trace、debug、info、warn、error、fatal、off

  說明:this

  1日誌文件在10Mb大小時,產生新的日誌文件。spa

  2級別

  logging.level.com.didispace=DEBUGcom.didispace包下全部class以DEBUG級別輸出

  logging.level.root=WARN:root日誌以WARN級別輸出

相關文章
相關標籤/搜索