spring-boot使用springAOP对接口请求、异常、响应进行日志记录

  • 日志切面类LogAspect
  • 请求control异常全局监控

日志切面类LogAspect

/*** @Author: huyingquan2011@163.com* @Date: Created by 9:47 2019/5/15* @Description:*/
@Aspect
@Component
public class WebLogAspect {private Logger logger = LoggerFactory.getLogger(getClass());private static final ThreadLocal<Long> timeTreadLocal = new ThreadLocal<>();@Pointcut("execution(* com.ehaoyao.springboot.controller..*.*(..)) ")private void log(){}@Before("log()")private void doBefore(JoinPoint joinPoint) throws Throwable {timeTreadLocal.set(System.currentTimeMillis());// 接收到请求,记录请求内容ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();//获取请求的requestHttpServletRequest request = attributes.getRequest();//获取所有请求的参数,封装为map对象// Map<String,Object> parameterMap = getParameterMap(request);MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();//获取被拦截的方法Method method = methodSignature.getMethod();//获取被拦截的方法名String methodName = method.getName();logger.info("请求方法  :{}", method.getDeclaringClass() + "." + methodName + "()");//获取所有请求参数key和valueString keyValue = getReqParameter(request);logger.info("请求url = {}", request.getRequestURL().toString());logger.info("请求方式requestMethod = {}", request.getMethod());logger.info("请求资源uri = {}", request.getRequestURI());logger.info("所有的请求参数 key:value = {}", keyValue);}@After("log()")public void after() {logger.info("aop的after()方法");}//controller请求结束返回时调用@AfterReturning(returning = "result", pointcut = "log()")public Object afterReturn(Object result) {logger.info("AOP afterReturn,返回值result = {}", result.toString());// System.out.println("返回值="+result.toString());long startTime = timeTreadLocal.get();double callTime = (System.currentTimeMillis() - startTime) / 1000.0;logger.info("调用controller花费时间time = {}s", callTime);return result;}/*** 获取所有请求参数,封装为map对象** @return*/public Map<String, Object> getParameterMap(HttpServletRequest request) {if (request == null) {return null;}Enumeration<String> enumeration = request.getParameterNames();Map<String, Object> parameterMap = new HashMap<String, Object>();StringBuilder stringBuilder = new StringBuilder();while (enumeration.hasMoreElements()) {String key = enumeration.nextElement();String value = request.getParameter(key);String keyValue = key + " : " + value + " ; ";stringBuilder.append(keyValue);parameterMap.put(key, value);}return parameterMap;}public String getReqParameter(HttpServletRequest request) {if (request == null) {return null;}Enumeration<String> enumeration = request.getParameterNames();//StringBuilder stringBuilder = new StringBuilder();JSONArray jsonArray = new JSONArray();while (enumeration.hasMoreElements()) {String key = enumeration.nextElement();String value = request.getParameter(key);JSONObject json = new JSONObject();//String keyValue = key+" : " +value+" ; ";json.put(key, value);//stringBuilder.append(keyValue);jsonArray.add(json);}//JSONObject jsonObject = new JSONObject();//jsonObject.put("请求参数为:",jsonArray.toString());return jsonArray.toString();}}

pom文件引入aop

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

请求control异常全局监控

*** @Author: huyingquan2011@163.com* @Date: Created by 9:41 2019/5/15* @Description:*/
@ControllerAdvice(basePackages="com.ehaoyao.springboot.controller")
public class GlobalExceptionHandler {private Logger logger = LoggerFactory.getLogger(getClass());@ExceptionHandler(RuntimeException.class)@ResponseBodypublic Map<String, Object> errorMsg(HttpServletRequest request,Exception e){logger.info("异常链接: {}",request.getRequestURL().toString());logger.info("异常信息: {}",e.getMessage());Map<String, Object> errorMsgResult=new HashMap<>();//errorMsgResult.put("code", e.);errorMsgResult.put("msg", e.getMessage());return errorMsgResult;}}

spring-boot使用springAOP对接口请求、异常、响应进行日志记录相关推荐

  1. Spring Boot中扩展XML请求和响应的支持

    在Spring Boot中,我们大多时候都只提到和用到了针对HTML和JSON格式的请求与响应处理.那么对于XML格式的请求要如何快速的在Controller中包装成对象,以及如何以XML的格式返回一 ...

  2. Spring boot 解决 hibernate no session异常

    Spring boot 解决 hibernate no session异常 参考文章: (1)Spring boot 解决 hibernate no session异常 (2)https://www. ...

  3. Spring Boot 中如何统一 API 接口响应格式?

    今天又要给大家介绍一个 Spring Boot 中的组件–HandlerMethodReturnValueHandler. 在前面的文章中(如何优雅的实现 Spring Boot 接口参数加密解密?) ...

  4. spring boot中 使用http请求

    因为项目需求,需要两个系统之间进行通信,经过一番调研,决定使用http请求. 服务端没有什么好说的,本来就是使用web 页面进行访问的,所以spring boot启动后,controller层的接口就 ...

  5. Spring Boot 2.x基础教程:找回启动日志中的请求路径列表

    如果您看过之前的Spring Boot 1.x教程,或者自己原本就对Spring Boot有一些经验,或者对Spring MVC很熟悉.那么对于Spring构建的Web应用在启动的时候,都会输出当前应 ...

  6. Spring Boot中表格的请求以及表格界面的显示

    目录 理论 演示及源码 理论 后端通过@GetMapping获取数据,把数据存储在Model中,前端使用模板引擎机进行获取即可. 在@GetMapping中填写请求信息: Model再通过addAtt ...

  7. Spring Boot 前后端配合及接口化测试学习记录[3]

    前后端不分离 1.对静态资源的映射处理 2.模板引擎: 模板引擎(这里特指用于Web开发的模板引擎)是为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档,用于网站的模板引擎就会生成 ...

  8. Spring Boot –使用执行器端点在运行时配置日志级别

    从Spring Boot 1.5开始,新的loggers器执行器端点允许在运行时查看和更改应用程序记录级别. 将spring-boot-actuator添加到您的项目 <dependency&g ...

  9. Spring Boot中对log4j进行多环境不同日志级别的控制

    之前介绍了在<Spring boot中使用log4j记录日志>,仅通过log4j.properties对日志级别进行控制,对于需要多环境部署的环境不是很方便,可能我们在开发环境大部分模块需 ...

最新文章

  1. [USACO08NOV]lites
  2. AtCoder Beginner Contest 198 (A ~ F)题解
  3. c语言表达逻辑量的方法,c语言中用什么表示逻辑量为真
  4. 利用反射光电管 ITR9909 制作节能信标光电感应开关
  5. 如何将std :: string转换为const char *或char *?
  6. Distributed Systems笔记-NFS、AFS、GFS
  7. export function函数传参_从底层看前端(七)—— JavaScript到底有多少种函数?
  8. NET多线程探索-线程同步和通信
  9. Python学习笔记:文件(File)
  10. 陕西师范大学计算机专业排名,陕西师范大学优势专业排名,2021年陕西师范大学最好的专业排名...
  11. html怎么用脚本显示隐藏,使用隐藏状态而不是注释或自定义脚本标记来模板化HTML...
  12. 阶段5 3.微服务项目【学成在线】_day02 CMS前端开发_12-webpack研究-webpack安装
  13. python两行代码实现转换视频格式,以flv转换mp4为例
  14. 蓝桥杯李白打酒php,蓝桥杯:李白打酒
  15. 互联网晚报 | 9月10日 星期五 | 美团启动数字人民币低碳出行试点;vivo X70系列正式发布;旷视科技科创板IPO过会...
  16. incsgo 可直接取回最好的国内CSGO饰品皮肤开箱网站
  17. Redis源码分析(sds)
  18. fsck的介绍和应用
  19. html 醒目的样式,创意醒目门牌设计欣赏
  20. python---打印函数print延时且不按顺序输出

热门文章

  1. AppleWatch大卖,地图战硝烟再起?
  2. 深圳计划生育办理相关
  3. 解决使用代理时无法访问 Microsoft Store 0x80131500
  4. zookeeper实现服务器动态上下线,分布式锁
  5. 操作系统系统调用实验
  6. FZU 1922 非主流
  7. 最终信息模式:终结香农极限,语义通信的另类空间
  8. 说说 Activity、Intent、Service 是什么关系
  9. 炼金术士这本书很不错
  10. dnf服务器炸团门票怎么找回,DNF:打团掉线无法重连攻坚队?自助申请门票补偿系统上线...