Springboot整合AOP实现日志的保存

1.定义注解

/*** 系统日志元注解*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface LogFilter {String value() default "" ;
}

2.编写切面的实现

@Aspect
@Component
public class LogAspect {private static final Logger LOGGER = LoggerFactory.getLogger(LogAspect.class) ;//切入点,已经被增强的连接点。@Pointcut("@annotation(com.boot.aop.config.LogFilter)")public void logPointCut (){}//通知增强代码@Around("logPointCut()")public Object around (ProceedingJoinPoint point) throws Throwable {Object result = null ;try{// 执行方法result = point.proceed();// 保存请求日志saveRequestLog(point);} catch (Exception e){// 保存异常日志saveExceptionLog(point,e.getMessage());}return result;}/*** 捕获异常:/ by zero* 请求路径:http://localhost:8011/saveExceptionLog* 请求方法:saveExceptionLog* 模块描述:保存异常日志* 请求参数:["cicada"]*/private void saveExceptionLog (ProceedingJoinPoint point,String exeMsg){LOGGER.info("捕获异常:"+exeMsg);HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();LOGGER.info("请求路径:"+request.getRequestURL());MethodSignature signature = (MethodSignature) point.getSignature();Method method = signature.getMethod();LOGGER.info("请求方法:"+method.getName());// 获取方法上LogFilter注解LogFilter logFilter = method.getAnnotation(LogFilter.class);String value = logFilter.value() ;LOGGER.info("模块描述:"+value);Object[] args = point.getArgs();LOGGER.info("请求参数:"+ JSONObject.toJSONString(args));}/*** 请求路径:http://localhost:8011/saveRequestLog* 请求方法:saveRequestLog* 模块描述:保存请求日志* 请求参数:["cicada"]*/private void saveRequestLog (ProceedingJoinPoint point){HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();LOGGER.info("请求路径:"+request.getRequestURL());MethodSignature signature = (MethodSignature) point.getSignature();Method method = signature.getMethod();LOGGER.info("请求方法:"+method.getName());// 获取方法上LogFilter注解LogFilter logFilter = method.getAnnotation(LogFilter.class);String value = logFilter.value() ;LOGGER.info("模块描述:"+value);Object[] args = point.getArgs();LOGGER.info("请求参数:"+ JSONObject.toJSONString(args));}
}

3.测试

@LogFilter("保存请求日志")@RequestMapping("/saveRequestLog")public String saveRequestLog (@RequestParam("name") String name){return "success:"+name ;}@LogFilter("保存异常日志")@RequestMapping("/saveExceptionLog")public String saveExceptionLog (@RequestParam("name") String name){int error = 100 / 0 ;System.out.println(error);return "success:"+name ;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/127706.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[极客大挑战 2019]FinalSQL(bypass盲注)

这里是数字型注入,选择一个序号 fuzz ?id1这里过滤了很多东西 使用fuzzSQL字典,这是我自己定义编写的一个fuzz字典,内容较少 select from information . tables whereand " or | & union columns updatexml extractvalue databa…

微信小程序给 thinkphp后端发送请求出现错误 Wrong number of segments 问题的解决 【踩坑记录】

微信小程序给 thinkphp后端发送请求出现错误 Wrong number of segments 问题的解决 【踩坑记录】 微信小程序代码部分PHP后端部分错误显示解决方案及步骤(总结) 微信小程序代码部分 //给后端接口发送一个json请求,并且得通过token鉴权ToUpdatePwd(){wx.r…

【MySQL】一文详解MySQL,从基础概念到调优

作者简介 前言 博主之前写过一个MySQL的系列,从基础概念、SQL到底层原理、优化,专栏地址: https://blog.csdn.net/joker_zjn/category_12305262.html?spm1001.2014.3001.5482 本文会是这个系列的清单,拉通来聊一聊Mysql从基础概…

通讯软件019——分分钟学会Prosys OPC UA Server配置

本文介绍如何配置Prosys OPC UA Simulation Server,通过本文可以对OPC UA的基本概念有所了解,掌握OPC UA的本质。更多通信资源请登录网信智汇(wangxinzhihui.com)。 1、启动OPC UA Server Prosys OPC UA Simulation Server启动后就处于运行状态。 2、配…

【ARM CoreLink 系列 1 -- CoreLink 系列 产品介绍】

文章目录 ARM CoreLink 介绍ARM CoreLink InterconnectARM CoreLink 处理器外设ARM CoreLink Memory Controllers ARM CoreLink 介绍 ARM的CoreLink系列产品是一套能够进行高效互联的组件和工具,它们用于构建高性能、低功耗的嵌入式和消费电子设备。CoreLink产品系…

CUDA小白 - NPP(4) 图像处理 Data Exchange and Initialization(1)

cuda小白 原始API链接 NPP GPU架构近些年也有不少的变化,具体的可以参考别的博主的介绍,都比较详细。还有一些cuda中的专有名词的含义,可以参考《详解CUDA的Context、Stream、Warp、SM、SP、Kernel、Block、Grid》 常见的NppStatus&#xf…

【MySQL】表的约束

目录 MySQL表的约束 空属性 默认值 列描述 zerofill 主键 自增长 唯一键 外键 综合案例 MySQL表的约束 真正约束字段的是数据类型,如果插入的数据超出了对应数据类型的取值范围,那么数据将会插入失败。但是数据类型的约束很单一,为…

webpack(四)plugin

定义 和loader的区别 loader:文件加载器,能够加载资源,并对这些文件进行一些处理,诸如编译、压缩等,最终一起打包到指定的文件中。plugin:赋予了webpack各种灵活的功能,例如打包优化、资源管理、环境变量注入等&…

C++初阶:C++入门

目录 一.iostream文件 二.命名空间 2.1.命名空间的定义 2.2.命名空间的使用 三.C的输入输出 四.缺省参数 4.1.缺省参数概念 4.2.缺省参数分类 4.3.缺省参数注意事项 4.4.缺省参数用途 五.函数重载 5.1.重载函数概念 5.2.C支持函数重载的原理--名字修饰(name Mangl…

第 2 章 线性表(学生健康登记表实现)

1. 示例代码 1) status.h /* DataStructure 预定义常量和类型头文件 */#ifndef STATUS_H #define STATUS_H/* 函数结果状态码 */ #define TRUE 1 /* 返回值为真 */ #define FALSE 0 /* 返回值为假 */ #define RET_OK 0 /* 返回值正确 */ #define INFEASI…

【自学开发之旅】Flask-回顾--对象拆分-蓝图(二)

url-统一资源定位符-不同的url对应不同的资源 作为服务端&#xff0c;url和视图函数的映射关系就是路由。 定义传递参数的方式&#xff1a; 1.创建动态url app.route("/login2/<username>/<passwd>") def login2(username, passwd):if username "…

数据分析和可视化平台:Splunk Enterprise for mac v9.1.1激活版 兼容m1

Splunk Enterprise 是一个数据分析和可视化平台&#xff0c;可帮助企业理解其数据。虽然没有适用于 Mac OS 的 Splunk Enterprise 官方版本&#xff0c;但他们确实为 Mac OS 提供了一个名为“Splunk Light”的应用程序&#xff0c;它提供了基本的数据索引、搜索和仪表板。或者&…

基于Yolov8的中国交通标志(CCTSDB)识别检测系统

目录 1.Yolov8介绍 2.纸箱破损数据集介绍 2.1数据集划分 2.2 通过voc_label.py得到适合yolov8训练需要的 2.3生成内容如下 3.训练结果分析 1.Yolov8介绍 Ultralytics YOLOv8是Ultralytics公司开发的YOLO目标检测和图像分割模型的最新版本。YOLOv8是一种尖端的、最先进的&…

【数据分析】Python:处理缺失值的常见方法

在数据分析和机器学习中&#xff0c;缺失值是一种常见的现象。在实际数据集中&#xff0c;某些变量的某些条目可能没有可用的值。处理缺失值是一个重要的数据预处理步骤。在本文中&#xff0c;我们将介绍如何在 Pandas 中处理缺失值。 我们将探讨以下内容&#xff1a; 什么是缺…

Redis-带你深入学习数据类型list

目录 1、list列表 2、list相关命令 2.1、添加相关命令&#xff1a;rpush、lpush、linsert 2.2、查找相关命令&#xff1a;lrange、lindex、llen 2.3、删除相关命令&#xff1a;lpop、rpop、lrem、ltrim 2.4、修改相关命令&#xff1a;lset 2.5、阻塞相关命令&#xff1a…

appium环境搭建

一.appium环境搭建 1.python3 python3的下载安装这里就不多做介绍了&#xff0c;当然你也可以选择自己喜欢的语音&#xff0c;比如java… 2.jdk 1&#xff09;下载地址 官网(需登录账号)&#xff1a; https://www.oracle.com/java/technologies/downloads/ 百度网盘&…

Qt应用开发(基础篇)——向导对话框 QWizard

一、前言 QWizard类继承于QDialog&#xff0c;为有向导界面需求的应用环境提供了一个框架。 对话框窗口 QDialog QWizard向导对话框是一个拥有队列界面的特殊对话框&#xff0c;向导的目的是引导用户一步一步的完成预设的流程。向导常用于软件安装界面向导、硬件线路安装向导、…

界面控件DevExpress WPF(v23.2)下半年发展路线图

本文主要概述了DevExpress官方在下半年&#xff08;v23.2&#xff09;中一些与DevExpress WPF相关的开发计划。 通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序&#xff0c;这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 DevExpress …

一起学数据结构(5)——栈和队列

1. 栈的相关定义及特点&#xff1a; 1. 栈的相关定义&#xff1a; 在正式介绍栈的定义之前&#xff0c;首先来回顾一下关于线性表的定义&#xff1a; 线性表是具有相同数据类型的个数据元素的有限序列&#xff0c;其中为表长。当时&#xff0c;可以把线性表看作一个空表&…

SwiftUI 内功加持:“曳光弹“实现自定义样式进度条(ProgressView)

概览 虽然 SwiftUI 已为我们内置了很多常用视图&#xff0c;不过有时我们还是需要根据实际来进一步美化显示或增加功能。 如上图所示&#xff0c;在本篇博文中我们将结合敏捷哲学中一个超级实用的开发技巧&#xff1a;曳光弹&#xff0c;来一步一个脚印循序渐进的实现 Progres…