在springboot中怎么使用AOP进行全局日志记录
发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,小编给大家分享一下在springboot中怎么使用AOP进行全局日志记录,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!1、 spring AOP 是什么?spring 的两大核心就是
千家信息网最后更新 2025年11月08日在springboot中怎么使用AOP进行全局日志记录
小编给大家分享一下在springboot中怎么使用AOP进行全局日志记录,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!
1、 spring AOP 是什么?
spring 的两大核心就是 IOC 和 AOP,AOP 是 spring 框架面向切面的编程思想,AOP是横切性的技术,将涉及多业务流程的通用功能抽取并单独封装,形成独立的切面,再将这些切面横向切入到业务流程指定的位置中。
2、spring AOP 能做什么?
AOP 主要是从切面入手,将日志记录、安全控制、事务处理、全局异常处理等全局功能从我们的业务逻辑代码中划分出来。
3、spring AOP 我能用 AOP 解决什么问题?
正好我这边需要做一个全局的日志,如果每个方法都去写日志记录,这样代码量非常大,而且代码繁琐冗余,全局记录的话,只需要在方法上增加一个注解就可以实现日志记录。
好了,不多bb,直接上代码实现
一、引入依赖,增加自定义注解
1、引入 maven 依赖
org.springframework.boot spring-boot-starter-aop
2、增加自定义注解 OperationLog
@Target(ElementType.METHOD) //注解放置的目标位置,METHOD是可注解在方法级别上@Retention(RetentionPolicy.RUNTIME) //注解执行阶段@Documentedpublic @interface OperationLog { String operDesc() default ""; // 操作说明}二、为自定义注解编写切面实现
@Aspect //标识一个切面类@Componentpublic class OperationLogAspect { private static final Logger logger = LoggerFactory.getLogger(OperationLogAspect.class); @Autowired private OperatelogsService OperatelogsService; @Autowired private SysUserService userService; /** * 设置操作日志切入点 记录操作日志 在注解的位置切入代码 */ @Pointcut("@annotation(com.wxw.annotation.OperationLog)") public void operLogPoinCut() { } /** * 正常返回通知,拦截用户操作日志,连接点正常执行完成后执行, 如果连接点抛出异常,则不会执行 * * @param joinPoint 切入点 * @param keys 返回结果 */ @AfterReturning(value = "operLogPoinCut()", returning = "keys") public void saveOperLog(JoinPoint joinPoint, Object keys) { // 获取RequestAttributes RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes(); // 从获取RequestAttributes中获取HttpServletRequest的信息 HttpServletRequest request = (HttpServletRequest) requestAttributes .resolveReference(RequestAttributes.REFERENCE_REQUEST); Operatelogs operlog = new Operatelogs(); try { // 从切面织入点处通过反射机制获取织入点处的方法 MethodSignature signature = (MethodSignature) joinPoint.getSignature(); // 获取切入点所在的方法 Method method = signature.getMethod(); // 获取操作 OperationLog opLog = method.getAnnotation(OperationLog.class); if (opLog != null) { String operDesc = opLog.operDesc(); operlog.setfDescript(operDesc); // 操作描述 } // 获取请求的类名 String className = joinPoint.getTarget().getClass().getName(); // 获取请求的方法名 String methodName = method.getName(); methodName = className + "." + methodName; operlog.setfRequestMethod(methodName); // 请求方法 // 请求的参数 Object[] arguments = joinPoint.getArgs(); //判断参数数组是否为空 Stream> stream = ArrayUtils.isEmpty(arguments) ? Stream.empty() : Arrays.asList(arguments).stream(); //过滤 joinPoint.getArgs()返回的数组中携带有Request或者Response对象 List三、使用自定义日志注解
将自定义注解加在方法上,请求方法之后,就可以将方法的日志记录到自己的数据库里面了。
看完了这篇文章,相信你对"在springboot中怎么使用AOP进行全局日志记录"有了一定的了解,如果想了解更多相关知识,欢迎关注行业资讯频道,感谢各位的阅读!
方法
日志
注解
信息
参数
用户
切面
全局
数组
代码
切入点
名称
所在
业务
位置
字符
字符串
连接点
业务流程
功能
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络安全系列课堂片简报
奥运网络安全概念股
汕头市国家网络安全宣传周
外汇平台软件开发
数据库保护包括数据的安全性
软件开发类求职意向
网络安全攻击的主要方式
软件开发和微信小程序
excel服务器2007
全面排查网络安全通知
物联网的编程软件开发
辽宁软件开发外包公司
sku 数据库设计
解放车数据库
曙光海光三合一服务器
数据库字段类型改变
直播服务器哪个台好
网络安全体系建设与运营
网络和软件开发哪个好
网络安全绿色阅读文明上网手抄报
u8数据库安装后怎么拆卸
数据库文件测试
安徽三轴点胶软件开发
多媒体技术与网络技术的区别
台湾服务器电子厂供应链
单位网络安全管理制度条例
河湖划界数据库建设
中小学 网络安全法
管家婆服务器怎么打不开
大理上门回收服务器