为什么80%的码农都做不了架构师?>>>   

基本配置使用:

1. 在 pom.xml 中增加基础类库引用

        <!-- HH: 引入 spring-boot-aop 模块 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency>

2. 配置文件 application.yml 中增加参数配置

spring:application:name: HAVENT-SPRING-BOOT-DEMOaop:auto: true#proxy-target-class: true

3. 新增 KafkaLogAspect.java 拦截器类

package com.havent.demo.aop.aspect;import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;import java.util.Arrays;@Aspect
@Component
public class KafkaLogAspect {/*** 环绕通知:目标方法执行前后分别执行一些代码,发生异常的时候执行另外一些代码* @return*/@Around(value="execution(* com.havent.demo..*(..))")public Object aroundMethod(ProceedingJoinPoint joinPoint){long beginTime = System.currentTimeMillis();//请求的方法名String className = joinPoint.getTarget().getClass().getName();String methodName = joinPoint.getSignature().getName();String loggerType = className + "." + methodName;Object result = null;try {System.out.println("【前置通知】:the method 【" + loggerType + "】 begins with " + Arrays.asList(joinPoint.getArgs()));//执行目标方法result = joinPoint.proceed();System.out.println("【返回通知】:the method 【" + loggerType + "】 ends with " + result);} catch (Throwable e) {System.out.println("【异常通知】:the method 【" + loggerType + "】 occurs exception " + e);}// 执行时长(毫秒)long time = System.currentTimeMillis() - beginTime;System.out.println("【后置通知】:-----------------end.---------------------- time:" + time);return result;}}

注意代码中 execution(* com.havent.demo..*(..)) 表示监控范围为 com.havent.demo 下面的所有方法

调用 com.havent.demo 下面的方法,捕获日志如下:

进阶操作,监控 controller 操作,获取 web 请求信息:

package com.havent.demo.aop.aspect;import com.havent.demo.logger.service.KafkaService;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;import javax.servlet.http.HttpServletRequest;
import java.util.Arrays;@Aspect
@Component
public class KafkaLogAspect {@Autowiredprivate KafkaService logger;@Pointcut("execution(public * com.havent.demo.controller.*.*(..))")public void webLog(){}@Before("webLog()")public void deBefore(JoinPoint joinPoint) throws Throwable {// 接收到请求,记录请求内容ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();HttpServletRequest request = attributes.getRequest();// 记录下请求内容System.out.println("URL : " + request.getRequestURL().toString());System.out.println("HTTP_METHOD : " + request.getMethod());System.out.println("IP : " + request.getRemoteAddr());System.out.println("CLASS_METHOD : " + joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName());System.out.println("ARGS : " + Arrays.toString(joinPoint.getArgs()));//logger.trace("");}@AfterReturning(returning = "ret", pointcut = "webLog()")public void doAfterReturning(Object ret) throws Throwable {// 处理完请求,返回内容System.out.println("方法的返回值 : " + ret);//logger.trace("");}//后置异常通知@AfterThrowing("webLog()")public void throwss(JoinPoint jp){System.out.println("方法异常时执行.....");//logger.trace("");}//后置最终通知,final增强,不管是抛出异常或者正常退出都会执行@After("webLog()")public void after(JoinPoint jp){System.out.println("方法最后执行.....");}//环绕通知,环绕增强,相当于MethodInterceptor@Around("webLog()")public Object arround(ProceedingJoinPoint pjp) {System.out.println("方法环绕start.....");try {Object o =  pjp.proceed();System.out.println("方法环绕proceed,结果是 :" + o);return o;} catch (Throwable e) {e.printStackTrace();return null;}}}

执行结果如下:

转载于:https://my.oschina.net/u/943746/blog/1926820

【HAVENT原创】使用 Spring Boot 的 AOP 全局记录执行时间日志相关推荐

  1. Spring Boot——基于AOP的HTTP操作日志解决方案

    解决方案 package com.hailiu.web.aop;import com.fasterxml.jackson.databind.ObjectMapper; import com.haili ...

  2. Spring Boot 工程集成全局唯一ID生成器 Vesta

    2019独角兽企业重金招聘Python工程师标准>>> 本文内容脑图如下: 文章共 760字,阅读大约需要 2分钟 ! 概 述 在前一篇文章 <Spring Boot工程集成全 ...

  3. spring boot 四:全局异常捕捉

    spring boot 四:全局异常捕捉 1 前言 希望定制错误,比如一般springboot的500错误展示如下(trace等可以通过配置application.yml来决定隐藏还是具有): app ...

  4. Spring Boot整合ELK 处理为服务日志,妙!

    你知道的越多,不知道的就越多,业余的像一棵小草! 成功路上并不拥挤,因为坚持的人不多. 编辑:业余草 developer.ibm.com 推荐:https://www.xttblog.com/?p=5 ...

  5. Spring Boot + MDC 实现全链路调用日志跟踪

    写在前面 通过本文将了解到什么是MDC.MDC应用中存在的问题.如何解决存在的问题 MDC介绍 简介: MDC(Mapped Diagnostic Context,映射调试上下文)是 log4j .l ...

  6. Spring Boot:(六)默认日志logback配置解析

    Spring Boot:(六)默认日志logback配置解析 前言 今天来介绍下Spring Boot如何配置日志logback,我刚学习的时候,是带着下面几个问题来查资料的,你呢 如何引入日志? 日 ...

  7. Spring Boot 集成AOP

    在这里多谈一些关于AOP 方面的知识,如果你对AOP 方面的知识比较熟悉,可以直接略过这个段落,往下看. 一.AOP概述 AOP(面向切面编程) 概念:这种在运行时,动态地将代码切入到类的指定方法.指 ...

  8. spring boot 搭建 和 全局异常处理

    spring boot 搭建: java -jar -Dserver.port=10000 -Dlogging.path=/var/logs xxx.jar &   -- 默认在/var/lo ...

  9. Spring Boot @ControllerAdvice 处理全局异常,返回固定格式Json

    需求 在构建RestFul的今天,我们一般会限定好返回数据的格式比如: { "code": 0,   "data": {},   "msg" ...

  10. Spring Boot 使用 AOP 实现页面自适应

    鉴于复杂页面自适应的难度,一般会做几套模板分别适应手机.平板.电脑等设备.使用 Spring Boot 开发单体应用时,一般会使用 Thymeleaf 模板,那么可以使用 AOP 技术来实现页面自适应 ...

最新文章

  1. 七天学会NodeJS
  2. 从Spring开始,Java EE 6必须具备哪些附加功能?
  3. android 蓝牙sco stream_voice_call,android TTS输出总是要 A2DP_android_开发99编程知识库
  4. win10更新后无法进入linux,双系统win10更新后无法进入linux
  5. 金山办公:2021年净利润10.42亿元,同比增长19%
  6. php判断网址包含字符,php中判断一个字符串包含另一个字符串的方法
  7. conda和Anaconda的区别:
  8. qt分割获取文件路径(去文件名)
  9. (day 25 - 广度优先搜索 )剑指 Offer 32 - II. 从上到下打印二叉树 II
  10. 使用Android Studio向SVN上传新项目
  11. 电子设计自动化实验 实验三 频率计制作
  12. 汇编指令rep stosq
  13. Java面试之Java基础篇(offer 拿来吧你)
  14. Deltix宣布CryptoCortex与MPC钱包提供商Curv整合
  15. 《码农翻身》总结整理
  16. Java面试题(上)
  17. 免费数据库应用程序工具 - 不需代码
  18. 论文笔记-2019-ImageNet-trained CNNs are biased towards texture; increasing shape bias improves accuracy
  19. C#中WorkBook的操作
  20. 学 Python 都用来干嘛的?

热门文章

  1. 基于物联网技术的电动车锂电池安全预警系统
  2. win10、ubuntu系统设置CPU高性能模式、卓越性能
  3. 一个问题讨论:为什么有些境外和港澳台地区的手机APP打不开
  4. 小学计算机教师面试试题及答案,2019下半年小学信息技术教师资格证面试真题及答案汇总...
  5. 如果使用CSS创建表格显示
  6. 蜗牛星际安装U-NAS
  7. 铁路订票系统的简单设计
  8. 计算机视觉—车道线检测
  9. 论文阅读:《Bridging the Gap in 3D Object Detection for Autonomous Driving》
  10. linux如何查看隐藏进程中勒索病毒,.FileFuck勒索病毒删除+数据恢复(HiddenTear变体)...