SpringAOP實(shí)現(xiàn)日志收集管理功能(步驟詳解)
第一步引入必要的依賴
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>5.3.15</version> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.9.2</version> </dependency>
第二步創(chuàng)建自定義日志注解類
package com.example.aop.log.annotion; import java.lang.annotation.*; /** * @author zhr_java@163.com * @date 2022/3/29 20:56 */ @Inherited @Target({ElementType.METHOD}) @Retention(value = RetentionPolicy.RUNTIME) @Documented public @interface LogNotice {}
第三步切面設(shè)計(jì),掃描上面的注解
package com.example.aop.log.aop; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.Signature; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; import org.aspectj.lang.reflect.MethodSignature; import org.springframework.core.DefaultParameterNameDiscoverer; import org.springframework.stereotype.Component; import java.lang.reflect.Method; import java.util.HashMap; import java.util.Map; /** * @author zhr_java@163.com * @date 2022/3/29 20:59 */ @Aspect @Component public class LogAspect { @Pointcut("@annotation(com.example.aop.log.annotion.LogNotice)") public void doLog() {} @Around("doLog()") public Object insertLog(ProceedingJoinPoint joinPoint) throws Throwable { Object object = joinPoint.proceed(); try { HashMap paramsMap; Signature signature = joinPoint.getSignature(); Method method = ((MethodSignature) signature).getMethod(); String methodName = method.getName(); String className = method.getDeclaringClass().getName(); paramsMap = (HashMap) getParams(joinPoint, method); // 打印日志,可以記錄到數(shù)據(jù)庫的日志表里面,等到有客戶反饋的時(shí)候好去查詢?nèi)罩? System.out.println( "methodName: " + methodName + "; className: " + className + "; paramsMap:" + paramsMap); // 也可以記錄請求當(dāng)前接口耗費(fèi)的時(shí)間 } catch (Exception e) { // 如果在日志記錄的過程中出現(xiàn)問題,那么要處理一下異常,不要直接拋出,此處做成消息隊(duì)列通知或者打印日志 } // 此處要進(jìn)行返回代理的對象,如果沒有返回的話,前端是收不到數(shù)據(jù)的 return object; } private Map<String, Object> getParams(ProceedingJoinPoint joinPoint, Method method) { // get parameter names String[] parameterNames = new DefaultParameterNameDiscoverer().getParameterNames(method); Object[] args = joinPoint.getArgs(); Map<String, Object> params = new HashMap<>(8); if (parameterNames != null && parameterNames.length != 0) { for (int i = 0; i < parameterNames.length; i++) { params.put(parameterNames[i], args[i]); } return params; }
第四步把自定義的注解放到你的接口上面
package com.example.demo.controller; import com.example.aop.log.annotion.LogNotice; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * @author zhr_java@163.com * @date 2022/3/29 20:50 */ @RestController @RequestMapping("/person") public class PersonController { //在此處加上你自定義的注解(@LogNotice) @LogNotice @GetMapping("get_person") public String getPerson(Integer numbers) { return "123"; } }
第五步測試
到此這篇關(guān)于SpringAOP實(shí)現(xiàn)日志收集管理功能的文章就介紹到這了,更多相關(guān)SpringAOP日志收集管理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java 中的 BufferedReader 介紹_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
BufferedReader 是緩沖字符輸入流。它繼承于Reader。接下來通過本文給大家介紹BufferedReader的相關(guān)知識(shí),需要的朋友參考下吧2017-05-05SpringBoot3中數(shù)據(jù)庫集成實(shí)踐詳解
項(xiàng)目工程中,集成數(shù)據(jù)庫實(shí)現(xiàn)對數(shù)據(jù)的增曬改查管理,是最基礎(chǔ)的能力,所以下面小編就來和大家講講SpringBoot3如何實(shí)現(xiàn)數(shù)據(jù)庫集成,需要的可以參考下2023-08-08windows系統(tǒng)使用mvn命令打包并指定jdk路徑方式
這篇文章主要介紹了windows系統(tǒng)使用mvn命令打包并指定jdk路徑方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04Linux將Spring Boot項(xiàng)目的Jar包注冊為開機(jī)自啟動(dòng)系統(tǒng)服務(wù)的操作方法
jar文件是從maven package打包出來的,config/application.yml是原先在項(xiàng)目的resources文件夾里,外置出來方便適配開發(fā)環(huán)境和正式環(huán)境,這篇文章主要介紹了Linux將Spring Boot項(xiàng)目的Jar包注冊為開機(jī)自啟動(dòng)系統(tǒng)服務(wù)的操作方法,需要的朋友可以參考下2023-10-10