您好,登錄后才能下訂單哦!
這篇文章主要介紹了SpringBoot Start組件開發(fā)之記錄接口日志信息怎么實(shí)現(xiàn)的相關(guān)知識(shí),內(nèi)容詳細(xì)易懂,操作簡單快捷,具有一定借鑒價(jià)值,相信大家閱讀完這篇SpringBoot Start組件開發(fā)之記錄接口日志信息怎么實(shí)現(xiàn)文章都會(huì)有所收獲,下面我們一起來看看吧。
基于 AOP 實(shí)現(xiàn)系統(tǒng)監(jiān)控,主要是通過aop切面功能來增強(qiáng)方法,實(shí)現(xiàn)監(jiān)控。
項(xiàng)目結(jié)構(gòu)
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
實(shí)現(xiàn)過程主要是通過AOP攔截注解,然后對(duì)方法進(jìn)行處理
LogCheck 自定義注解,主要作用就是添加到需要監(jiān)控的方法上。
LogAutoConfigure 配置類,對(duì)一些類做初始化操作。
LogCheckJoinPoint 核心類,負(fù)責(zé)對(duì)攔截的方法做邏輯處理。
spring.factories spring-boot 自動(dòng)注入的配置文件。
springboot 在啟動(dòng)的時(shí)候 讀取spring.factories
里面的內(nèi)容,然后把配置類添加到spring容器中。 使用 springboot的自動(dòng)注入的功能完成配置的加載。
org.springframework.boot.autoconfigure.EnableAutoConfiguration=cn.anoxia.log.config.LogAutoConfigure
自定義攔截注解LogCheck
/** * @description: 方法耗時(shí)檢測注解 * @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 處理類, 定義切點(diǎn)為 注解,然后使用 環(huán)繞處理 對(duì)方法進(jìn)行增強(qiáng)。
/** * @description: aop攔截注解,進(jìn)行方法增強(qiáng) * @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(){ // 定義切點(diǎn) } @Around("aopPoint() && @annotation(logCheck)") public void doCheck(ProceedingJoinPoint joinPoint, LogCheck logCheck) throws Throwable { // 執(zhí)行前增強(qiáng) logger.info("當(dāng)前執(zhí)行的類:{}",joinPoint.getClass()); Method method = getMethod(joinPoint); Long start = System.currentTimeMillis(); try { // 執(zhí)行目標(biāo)方法 joinPoint.proceed(); }finally { System.out.println("監(jiān)控 - Begin By AOP"); System.out.println("監(jiān)控索引:" + logCheck.key()); System.out.println("監(jiān)控描述:" + logCheck.desc()); System.out.println("方法名稱:" + method.getName()); System.out.println("方法耗時(shí):" + (System.currentTimeMillis() - start) + "ms"); System.out.println("監(jiān)控 - 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()); } }
配置類里面的內(nèi)容, 對(duì)核心類進(jìn)行初始化,并且添加到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(); } }
創(chuàng)建一個(gè)項(xiàng)目,然后導(dǎo)入我們創(chuàng)建的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"; }
測試結(jié)果,可以獲取到執(zhí)行方法的一些信息,并且對(duì)方法進(jìn)行增強(qiáng)。
關(guān)于“SpringBoot Start組件開發(fā)之記錄接口日志信息怎么實(shí)現(xiàn)”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對(duì)“SpringBoot Start組件開發(fā)之記錄接口日志信息怎么實(shí)現(xiàn)”知識(shí)都有一定的了解,大家如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。