当前位置:主页 > java教程 > SpringBoot AOP统一处理Web请求日志

SpringBoot AOP统一处理Web请求日志的示例代码

发布:2023-04-09 18:25:02 59


给网友们整理相关的编程文章,网友姚寻菡根据主题投稿了本篇教程内容,涉及到springboot、aop、web请求日志、spring、aop实现日志记录、Springboot日志、SpringBoot AOP统一处理Web请求日志相关内容,已被696网友关注,下面的电子资料对本篇知识点有更加详尽的解释。

SpringBoot AOP统一处理Web请求日志

SpringBoot AOP统一处理Web请求日志

引入依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-aop</artifactId>
</dependency>
  • 新建过滤器 WebLogAspect.java
    • 使用 @Aspect 注解修饰:说明当前类 是一个切面类。
    • 使用 @Component注解修饰:标记 切面类 为组件,这样 IOC 容器 会为其实例化和管理(< bean>)
  • 定义切面方法:webLog() 方法名随意
    • 使用环绕通知 @Around(“execution(public * com.daxiong.mall.Controller..(…))”) 注解修饰指定 切面范围。
@Around("execution(public * com.daxiong.mall.controller.*.*(..))")
public Object webLog(ProceedingJoinPoint pjp) {}

记录请求 URL:

ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = attributes.getRequest();
log.info("URL : " + request.getRequestURL().toString());

请求类型:

log.info("HTTP_METHOD : " + request.getMethod());

IP 地址:

  • 若是本地 localhost,则会返回 ipv6 0:0:0:0:0:0:0:1
log.info("IP : " + request.getRemoteAddr());

记录请求的 类以及方法:

  • 使用 环绕通知的 ProceedingJoinPoint 参数。
log.info("CLASS_METHOD : " + pjp.getSignature().getDeclaringTypeName() + "." + pjp.getSignature().getName());

记录请求参数:

log.info("ARGS : " + Arrays.toString(pjp.getArgs()));

执行方法,处理请求

Object res = pjp.proceed(pjp.getArgs());

记录响应结果 使用 jackson 将帝乡转换为 json 格式。

log.info("RESPONSE : " + new ObjectMapper().writeValueAsString(res));

全部:

/**
 * 打印请求和响应信息
 */
@Aspect
@Component
public class WebLogAspect {
    private final Logger log = LoggerFactory.getLogger(WebLogAspect.class);

    @Around("execution(public * com.daxiong.mall.controller.*.*(..))")
    public Object webLog(ProceedingJoinPoint pjp) throws Throwable {
        log.info("========================新的请求========================");
        // 收到请求,记录请求内容
        ServletRequestAttributes attributes =
                (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = attributes.getRequest();
        log.info("URL : " + request.getRequestURL().toString());
        log.info("HTTP_METHOD : " + request.getMethod());
        // 若是 localhost,则会返回 0:0:0:0:0:0:0:1
        log.info("IP : " + request.getRemoteAddr());

        log.info("CLASS_METHOD : " + pjp.getSignature().getDeclaringTypeName() + "." + pjp.getSignature().getName());
        log.info("ARGS : " + Arrays.toString(pjp.getArgs()));

        // 执行方法,处理请求
        Object res = pjp.proceed(pjp.getArgs());

        // 记录响应
        log.info("RESPONSE : " + new ObjectMapper().writeValueAsString(res));

        return res;
    }
}

总结

到此这篇关于SpringBoot AOP统一处理Web请求日志的文章就介绍到这了,更多相关SpringBoot AOP统一处理Web请求日志内容请搜索码农之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持码农之家!


参考资料

相关文章

  • Springboot整合策略模式详解

    发布:2023-04-26

    这篇文章主要介绍了Springboot整合策略模式详解的相关资料,需要的朋友可以参考下


  • SpringBoot MDC全链路调用日志跟踪实现详解

    发布:2023-04-09

    这篇文章主要为大家介绍了SpringBoot MDC全链路调用日志跟踪实现详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪


  • SpringBoot 2 快速整合 Filter过程详解

    发布:2020-06-13

    这篇文章主要介绍了SpringBoot 2 快速整合 Filter过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下


  • SpringBoot项目启动后再请求远程接口的解决方式

    发布:2023-04-06

    Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的创建、运行、调试、部署等,这篇文章主要介绍了SpringBoot项目启动后再请求远程接口的实现方式 ,需要的朋友可以参考下


  • 浅谈Java(SpringBoot)基于zookeeper的分布式锁实现

    发布:2022-12-01

    给大家整理了关于SpringBoot的教程,这篇文章主要介绍了Java(SpringBoot)基于zookeeper的分布式锁实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习


  • SpringBoot Bean花式注解方法示例上篇

    发布:2023-04-07

    这篇文章主要介绍了SpringBoot Bean花式注解方法,很多时候我们需要根据不同的条件在容器中加载不同的Bean,或者根据不同的条件来选择是否在容器中加载某个Bean


  • springboot整合kaptcha生成验证码功能

    springboot整合kaptcha生成验证码功能

    发布:2022-09-14

    给大家整理一篇关于springboot的教程,这篇文章主要介绍了springboot整合kaptcha生成验证码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下


  • SpringBoot整合分布式锁redisson的示例代码

    发布:2023-03-25

    这篇文章主要介绍了SpringBoot整合分布式锁redisson,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下


网友讨论