springboot利用@Aspect實(shí)現(xiàn)日志工具類的詳細(xì)代碼
一、導(dǎo)包
<dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjrt</artifactId> <version>1.8.12</version> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.9.4</version> </dependency>
二、在啟動(dòng)類上進(jìn)行注解自動(dòng)掃描
@SpringBootApplication @EnableCaching @EnableAsync @ComponentScan({"com.workorder.*"}) public class WorkOrderApplication { public static void main(String[] args) { SpringApplication.run(WorkOrderApplication.class, args); } }
三、工具類
@Aspect @Component @Slf4j public class LogAspect { @Autowired private Environment env; @Pointcut("execution(public * com.workorder..controller..*.*(..))") public void logPointCut() {} @Around("logPointCut()") public Object around(ProceedingJoinPoint point) throws Throwable { log.info("========================================="); long beginTime = System.currentTimeMillis(); //執(zhí)行方法 Object result = point.proceed(); //執(zhí)行時(shí)長(zhǎng)(毫秒) long time = System.currentTimeMillis() - beginTime; //保存日志 saveSysLog(point, time); return result; } private void saveSysLog(ProceedingJoinPoint joinPoint, long time) { // 接收到請(qǐng)求,記錄請(qǐng)求內(nèi)容 ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); HttpServletRequest request = attributes.getRequest(); String logStr=""; if (isEnvironment("dev")){ String requestUrl = request.getRequestURL().toString() + "?"; //獲取所有參數(shù)方法 Enumeration<String> enu=request.getParameterNames(); while(enu.hasMoreElements()){ String paraName = enu.nextElement(); requestUrl+=paraName + "=" + request.getParameter(paraName) + "&"; } logStr+="\r\n請(qǐng)求地址:"+ requestUrl.substring(0,requestUrl.length()-1); } //請(qǐng)求的參數(shù) Object[] args = joinPoint.getArgs(); String params = JSONUtil.toJsonStr(args); logStr+="\r\n請(qǐng)求方式:"+ request.getMethod(); logStr+="\r\n請(qǐng)求方法Token:"+ request.getHeader("token"); logStr+="\r\n請(qǐng)求參數(shù):"+ params; logStr+="\r\nIP:"+ request.getRemoteAddr(); logStr+="\r\n響應(yīng)時(shí)間:"+ time+" ms"; log.info(logStr); /** * 判斷當(dāng)前是什么環(huán)境 * @param str * @return */ private boolean isEnvironment(String str) { boolean flag = false; String[] arr = env.getActiveProfiles(); List<String> list = Arrays.asList(arr); if (list.contains(str)) { flag = true; } return flag; } }
四、結(jié)果
到此這篇關(guān)于springboot利用@Aspect實(shí)現(xiàn)日志工具類的詳細(xì)代碼的文章就介紹到這了,更多相關(guān)springboot日志工具類內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringCloud如何使用Eureka實(shí)現(xiàn)服務(wù)之間的傳遞數(shù)據(jù)
這篇文章主要介紹了SpringCloud使用Eureka實(shí)現(xiàn)服務(wù)之間的傳遞數(shù)據(jù)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06Spring boot 跳轉(zhuǎn)到j(luò)sp頁(yè)面的實(shí)現(xiàn)方法
本篇文章主要介紹了Spring boot 跳轉(zhuǎn)到j(luò)sp頁(yè)面的實(shí)現(xiàn)方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-04-04String.intern()作用與常量池關(guān)系示例解析
這篇文章主要為大家介紹了String.intern()作用與常量池關(guān)系示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08關(guān)于mybatis使用${}時(shí)sql注入的問(wèn)題
這篇文章主要介紹了關(guān)于mybatis使用${}時(shí)sql注入的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12Spring?Boot?集成Redisson實(shí)現(xiàn)分布式鎖詳細(xì)案例
這篇文章主要介紹了Spring?Boot?集成Redisson實(shí)現(xiàn)分布式鎖詳細(xì)案例,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下2022-08-08spring框架下@value注解屬性static無(wú)法獲取值問(wèn)題
這篇文章主要介紹了spring框架下@value注解屬性static無(wú)法獲取值問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11利用spring aop實(shí)現(xiàn)動(dòng)態(tài)代理
這篇文章主要為大家詳細(xì)介紹了利用spring aop實(shí)現(xiàn)動(dòng)態(tài)代理的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03java解析dbf之通過(guò)javadbf包生成和讀取dbf文件
這篇文章主要介紹了java通過(guò)javadbf讀取和生成DBF文件的方法,大家參考使用吧2014-01-01