您好,登錄后才能下訂單哦!
這篇文章主要介紹了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組件開發之記錄接口日志信息怎么實現”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。