SpringBoot切面AOP打印请求和响应日志
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打印请求和响应日志相关推荐
- Spring Boot使用AOP在控制台打印请求、响应信息
AOP称为面向切面编程,在程序开发中主要用来解决一些系统层面上的问题,比如日志,事务,权限等. AOP简介 AOP全称Aspect Oriented Programming,面向切面,AOP主要实现的 ...
- SpringBoot利用Aop打印入参出参日志
SpringBoot利用Aop打印入参出参日志 前言 以前写代码不会用Aop的时候,记录入参出参的日志打印都是在Controller中完成的,每个Controller的方法开始之前先打印个日志,然后方 ...
- SpringCloud Gateway打印请求、响应内容和唯一流水号配置
SpringCloudGateway默认不打印请求和响应body,对于问题排查非常不友好.通过以下方式打印请求和响应body,header等内容. 实现自定义netty handler,转发请求和接受 ...
- springboot使用AOP打印日志信息
上一篇介绍了springboot整合Mybatis例子,这一篇在上一篇的基础上,简单修改部分实现日志信息的打印. 随着项目功能的一点点增加,打印日志信息就非常必要了,可以帮助我们很快确定哪里出现了问题 ...
- aop springboot 传入参数_Springboot添加AOP打印请求参数
1. 引入依赖 org.springframework.boot spring-boot-starter-aop 2. 写切面 切面类需要加@Aspect和@Component注解 package c ...
- Springboot使用AOP记录请求日志和返回数据
首先是日志表结构 DROP TABLE IF EXISTS `protal_logvo`; CREATE TABLE `protal_logvo` (`id` varchar(255) NOT NUL ...
- springboot 利用aop实现系统日志和操作日志记录
1.目的 通过aop及注解的方式,记录异常信息和特定的操作日志到数据库. 2.引入依赖 <dependency><groupId>org.springframework.boo ...
- springboot切面AOP拦截父类或接口中标记注解的方法
一.注解的继承性回顾 被@Inherited元注解标注的注解标注在类上的时候,子类可以继承父类上的注解. 注解未被@Inherited元注解标注的,该注解标注在类上时,子类不会继承父类上标注的注解. ...
- SpringBoot:AOP处理请求
pom.xml添加依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId& ...
最新文章
- PyCharm中Directory与Python package的区别
- c语言删除偶数号节点,第十二周作业
- python 内置函数的一部分
- iOS开发-简单工厂模式
- python个人项目-Python个人练习项目 2-1
- 基于知识的推荐系统(案例学习)
- 配置Tomcat的日志系统
- display转块状化
- js导出的xlsx无法打开_js-xlsx 导出表格至excel
- python中threading中的lock类
- 所有子模块都要执行的checkstyle检查
- Netflix的zuul使用
- POJ 1980【Unit Fraction Partition】
- 线程的sleep()方法和yield()方法有什么区别?
- 固态硬盘与普通硬盘有哪些区别?
- mybatis自定义枚举类型的转换器以及各种使用场景
- 视频mov如何转换成mp4?
- 笔记本电脑计算机的配置表,笔记本组装配置清单_笔记本电脑配置单及价格
- centos安装Nvidia显卡驱动(3090)
- python大学生信息管理系统_基于Python的高等学校社团信息管理系统
热门文章
- 传统企业转型互联网的十大死法
- 基于 Vue 制作一个猜拳小游戏
- 关于海康摄像头OSD字幕叠加(.NET/C#/Formwork)
- 京淘项目业务接口文档
- Android——一个简单的APP模版
- 14. 谁考了第k名
- 新冠病毒分型和突变分析(SARS-CoV2_ARTIC_Nanopore)
- Java四大名著--effective java
- 【论文阅读】A Survey of Challenges and Opportunities in Sensing and Analytics for Risk Factors of Cardiova
- 天津大学计算机专业复试,天津大学计算机应用复试全过程及感受