1.说明

Spring Boot微服务对外开放的Restful接口,
为了方便定位问题,
一般需要记录请求日志和响应日志,
而在每个接口中开发日志代码是非常繁琐的,
本文介绍使用Spring的切面AOP,
统一打印接口中的请求和响应日志,
也可以捕获异常,打印异常日志,
让接口的代码实现更加简洁,
同时也方便后期修改。

下面基于开发好Restful接口的微服务:SpringBoot开发Restful接口
添加AOP切面打印日志功能。

2.添加切面依赖

修改pom.xml文件,
增加spring-boot-starter-aop切面依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId>
</dependency>

如果使用的是Log4j2日志框架,
需要移除默认的Logback依赖。

<!-- Log4j2 日志框架 -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
<!-- Spring Boot Web服务 -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></exclusion></exclusions>
</dependency>
<!-- Spring Boot Aop切面 -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></exclusion></exclusions>
</dependency>

3.新建切面类

新建切面类WebLogAspect.java:

package com.yuwen.spring.demo.aspect;import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;/*** Restful接口日志切面,用于打印请求日志和响应日志*/
@Component
@Aspect
public class WebLogAspect {private Logger logger = LoggerFactory.getLogger(getClass());@Pointcut("execution(public * com.yuwen.spring.demo.controller.*.*(..))")public void webLog() {}@Around("webLog()")public Object around(ProceedingJoinPoint point) throws Throwable {String methodName = point.getSignature().toShortString();Object[] params = point.getArgs();if (logger.isDebugEnabled()) {logger.debug("{} start, request={}", methodName, params);}Object result;try {result = point.proceed();} catch (Exception e) {logger.error("{} error, exception={}", methodName, e);throw e;}if (logger.isDebugEnabled()) {logger.debug("{} end, result={}", methodName, result);}return result;}
}

注意修改切点,
配置为需要打印请求和响应日志的接口,
这里配置的是com.yuwen.spring.demo.controller包下的所有类的所有方法,
微服务运行后,匹配到的方法都会打印日志:

@Pointcut("execution(public * com.yuwen.spring.demo.controller.*.*(..))")

4.打印日志

启动Spring Boot服务,
然后随便调用几个Rest接口,
比如创建用户,
切面打印日志效果如下:

17:34:38.888 [http-nio-8088-exec-1] DEBUG [com.yuwen.spring.demo.aspect.WebLogAspect.around(WebLogAspect.java:34)] - UserControllerImpl.createUser(..) start, request=[User [id=1, name=tom, birthday=Thu Mar 25 17:21:45 GMT+08:00 2021, email=tom@ai.com]]
createUser, user=User [id=1, name=tom, birthday=Thu Mar 25 17:21:45 GMT+08:00 2021, email=tom@ai.com]
17:34:38.899 [http-nio-8088-exec-1] DEBUG [com.yuwen.spring.demo.aspect.WebLogAspect.around(WebLogAspect.java:46)] - UserControllerImpl.createUser(..) end, result=null

第1条日志对应接口请求,
第2条日志是创建用户的接口自己打印的,
第3条日志对应响应日志。
另外如果发生异常,
也会打印异常日志。

5.问题解决

如果微服务不打印日志,
可以参考:SpringBoot集成Log4j2框架


http://www.taodudu.cc/news/show-5364403.html

相关文章:

  • 设置响应对象的编码格式
  • 响应式字体大小
  • 响应曲面法(更新中)
  • 用二维数组生成随机数可控制范围C语言
  • 三维空间无人机集群编队控制,避障,目标追踪
  • 旋转——绕原点二维旋转,绕任意点的二维旋转,三维基本旋转,绕任意轴的三维旋转
  • ArcBall二维控制三维旋转
  • 开维控制精灵Ctrl.js使用教程
  • 研报精选230219
  • SAP-QM 检验批状态汇总
  • bug提交规范模板(不同公司流程规范不一样,仅供参考)
  • workbench工具栏缺失解决方法(仅供参考)
  • 谈谈对面向对象的理解,仅供参考
  • 关于springboot访问不到static里面的js文件解决方法(仅供参考)
  • 教你如何使用android studio 4.0发布release 版本 学习记录 仅供参考
  • 支付宝商户申请流程(仅供参考)
  • 南京邮电大学C语言实验报告6v2(仅供参考)
  • nessus扫描报告英文转中文脚本1009
  • python程序项目报告_python程序设计实验报告
  • python项目实训报告简介_python实验报告5
  • python程序报告_Python程序设计实验一报告
  • unittest生成测试报告步骤
  • eblog项目讲解视频上线啦,长达17个小时!!
  • 买了课程我不学,放着发霉也不看,哎~就是玩儿
  • 关于我的第一篇公号付费文章谈谈自己的想法
  • CSS+JavaScript制作文字的LED跑马灯效果
  • 定时器控制led跑马灯
  • 备战蓝桥杯day1__LED跑马灯
  • 基于蓝桥杯的单片机模块练习——LED跑马灯
  • Arduino全彩LED跑马灯实验

SpringBoot切面AOP打印请求和响应日志相关推荐

  1. Spring Boot使用AOP在控制台打印请求、响应信息

    AOP称为面向切面编程,在程序开发中主要用来解决一些系统层面上的问题,比如日志,事务,权限等. AOP简介 AOP全称Aspect Oriented Programming,面向切面,AOP主要实现的 ...

  2. SpringBoot利用Aop打印入参出参日志

    SpringBoot利用Aop打印入参出参日志 前言 以前写代码不会用Aop的时候,记录入参出参的日志打印都是在Controller中完成的,每个Controller的方法开始之前先打印个日志,然后方 ...

  3. SpringCloud Gateway打印请求、响应内容和唯一流水号配置

    SpringCloudGateway默认不打印请求和响应body,对于问题排查非常不友好.通过以下方式打印请求和响应body,header等内容. 实现自定义netty handler,转发请求和接受 ...

  4. springboot使用AOP打印日志信息

    上一篇介绍了springboot整合Mybatis例子,这一篇在上一篇的基础上,简单修改部分实现日志信息的打印. 随着项目功能的一点点增加,打印日志信息就非常必要了,可以帮助我们很快确定哪里出现了问题 ...

  5. aop springboot 传入参数_Springboot添加AOP打印请求参数

    1. 引入依赖 org.springframework.boot spring-boot-starter-aop 2. 写切面 切面类需要加@Aspect和@Component注解 package c ...

  6. Springboot使用AOP记录请求日志和返回数据

    首先是日志表结构 DROP TABLE IF EXISTS `protal_logvo`; CREATE TABLE `protal_logvo` (`id` varchar(255) NOT NUL ...

  7. springboot 利用aop实现系统日志和操作日志记录

    1.目的 通过aop及注解的方式,记录异常信息和特定的操作日志到数据库. 2.引入依赖 <dependency><groupId>org.springframework.boo ...

  8. springboot切面AOP拦截父类或接口中标记注解的方法

    一.注解的继承性回顾 被@Inherited元注解标注的注解标注在类上的时候,子类可以继承父类上的注解. 注解未被@Inherited元注解标注的,该注解标注在类上时,子类不会继承父类上标注的注解. ...

  9. SpringBoot:AOP处理请求

    pom.xml添加依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId& ...

最新文章

  1. PyCharm中Directory与Python package的区别
  2. c语言删除偶数号节点,第十二周作业
  3. python 内置函数的一部分
  4. iOS开发-简单工厂模式
  5. python个人项目-Python个人练习项目 2-1
  6. 基于知识的推荐系统(案例学习)
  7. 配置Tomcat的日志系统
  8. display转块状化
  9. js导出的xlsx无法打开_js-xlsx 导出表格至excel
  10. python中threading中的lock类
  11. 所有子模块都要执行的checkstyle检查
  12. Netflix的zuul使用
  13. POJ 1980【Unit Fraction Partition】
  14. 线程的sleep()方法和yield()方法有什么区别?
  15. 固态硬盘与普通硬盘有哪些区别?
  16. mybatis自定义枚举类型的转换器以及各种使用场景
  17. 视频mov如何转换成mp4?
  18. 笔记本电脑计算机的配置表,笔记本组装配置清单_笔记本电脑配置单及价格
  19. centos安装Nvidia显卡驱动(3090)
  20. python大学生信息管理系统_基于Python的高等学校社团信息管理系统

热门文章

  1. 传统企业转型互联网的十大死法
  2. 基于 Vue 制作一个猜拳小游戏
  3. 关于海康摄像头OSD字幕叠加(.NET/C#/Formwork)
  4. 京淘项目业务接口文档
  5. Android——一个简单的APP模版
  6. 14. 谁考了第k名
  7. 新冠病毒分型和突变分析(SARS-CoV2_ARTIC_Nanopore)
  8. Java四大名著--effective java
  9. 【论文阅读】A Survey of Challenges and Opportunities in Sensing and Analytics for Risk Factors of Cardiova
  10. 天津大学计算机专业复试,天津大学计算机应用复试全过程及感受