中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SpringBoot?Start組件開發之記錄接口日志信息怎么實現

發布時間:2023-04-28 10:52:42 來源:億速云 閱讀:122 作者:iii 欄目:開發技術

這篇文章主要介紹了SpringBoot Start組件開發之記錄接口日志信息怎么實現的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇SpringBoot Start組件開發之記錄接口日志信息怎么實現文章都會有所收獲,下面我們一起來看看吧。

目標

基于 AOP 實現系統監控,主要是通過aop切面功能來增強方法,實現監控。

設計

項目結構

cn-anoxia-start-log
└── src
    ├── main
    │   └── java
    │       ├── cn.anoxia.log
    │       │   ├── annotation
    │       │   │   └── LogCheck.java
    │       │   ├── config
    │       │   │   └── LogAutoConfigure.java
    │       │   └── LogCheckJoinPoint.java
    │       └── resources
    │           └── META-INF 
    │               └── spring.factories
    └── test
        └── java
            └── cn.anoxia.log.test
                └── ApiTest.java

實現過程主要是通過AOP攔截注解,然后對方法進行處理

  • LogCheck 自定義注解,主要作用就是添加到需要監控的方法上。

  • LogAutoConfigure 配置類,對一些類做初始化操作。

  • LogCheckJoinPoint 核心類,負責對攔截的方法做邏輯處理。

  • spring.factories spring-boot 自動注入的配置文件。

springboot 在啟動的時候 讀取spring.factories里面的內容,然后把配置類添加到spring容器中。 使用 springboot的自動注入的功能完成配置的加載。

org.springframework.boot.autoconfigure.EnableAutoConfiguration=cn.anoxia.log.config.LogAutoConfigure

自定義攔截注解LogCheck

/**
 * @description: 方法耗時檢測注解
 * @author:huangle
 * @date: 2022/7/22
 */
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE,ElementType.METHOD})
public @interface LogCheck {
    String key() default "";
    String desc() default "";
}

AOP 處理類, 定義切點為 注解,然后使用 環繞處理 對方法進行增強。

/**
 * @description: aop攔截注解,進行方法增強
 * @author:huangle
 * @date: 2022/7/22
 */
@Aspect
@Component
public class LogCheckJoinPoint {
    private final Logger logger = LoggerFactory.getLogger(LogCheckJoinPoint.class);
    @Pointcut("@annotation(cn.anoxia.log.annotation.LogCheck)")
    public void aopPoint(){
        // 定義切點
    }
    @Around("aopPoint() && @annotation(logCheck)")
    public void doCheck(ProceedingJoinPoint joinPoint, LogCheck logCheck) throws Throwable {
        // 執行前增強
        logger.info("當前執行的類:{}",joinPoint.getClass());
        Method method = getMethod(joinPoint);
        Long start = System.currentTimeMillis();
        try {
            // 執行目標方法
            joinPoint.proceed();
        }finally {
            System.out.println("監控 - Begin By AOP");
            System.out.println("監控索引:" + logCheck.key());
            System.out.println("監控描述:" + logCheck.desc());
            System.out.println("方法名稱:" + method.getName());
            System.out.println("方法耗時:" + (System.currentTimeMillis() - start) + "ms");
            System.out.println("監控 - End\r\n");
        }
    }
    private Method getMethod(JoinPoint jp) throws NoSuchMethodException {
        Signature sig = jp.getSignature();
        MethodSignature methodSignature = (MethodSignature) sig;
        return jp.getTarget().getClass().getMethod(methodSignature.getName(), methodSignature.getParameterTypes());
    }
}

配置類里面的內容, 對核心類進行初始化,并且添加到spring容器

@Configuration
public class LogAutoConfigure implements EnvironmentAware {
    private final Logger logger = LoggerFactory.getLogger(LogAutoConfigure.class);
    private final Map<String,Object> logConfigMap = new HashMap<>();
    @Bean
    @ConditionalOnMissingBean
    public LogCheckJoinPoint point(){
        return new LogCheckJoinPoint();
    }
}

測試

創建一個項目,然后導入我們創建的start

<dependency>
            <groupId>cn.anoxia</groupId>
            <artifactId>anoxia-spring-start-log</artifactId>
            <version>1.0.0-SNAPSHOT</version>
        </dependency>

添加注解,攔截方法

@LogCheck(key = "cn.anoxia.demo.controller.TestController",desc = "獲取用戶信息")
    @RequestMapping("/v1/info")
    public String testController(){
        return "hello";
    }

測試結果,可以獲取到執行方法的一些信息,并且對方法進行增強。

SpringBoot?Start組件開發之記錄接口日志信息怎么實現

關于“SpringBoot Start組件開發之記錄接口日志信息怎么實現”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“SpringBoot Start組件開發之記錄接口日志信息怎么實現”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

望江县| 邢台市| 如皋市| 万荣县| 获嘉县| 理塘县| 平邑县| 静安区| 尖扎县| 平乐县| 苏尼特右旗| 汉中市| 来凤县| 湘西| 广水市| 武强县| 宁陕县| 邵武市| 改则县| 赣榆县| 沙坪坝区| 秦皇岛市| 原平市| 普兰店市| 灵山县| 湘乡市| 易门县| 黄大仙区| 通化县| 惠安县| 米易县| 安仁县| 县级市| 贡嘎县| 民勤县| 若尔盖县| 海丰县| 苏尼特左旗| 潜山县| 马边| 惠东县|