在springboot中怎么使用AOP进行全局日志记录
发表于:2025-01-18 作者:千家信息网编辑
千家信息网最后更新 2025年01月18日,小编给大家分享一下在springboot中怎么使用AOP进行全局日志记录,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!1、 spring AOP 是什么?spring 的两大核心就是
千家信息网最后更新 2025年01月18日在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安全错误
数据库的锁怎样保障安全
手机应用显示连接服务器
应用软件开发与cpu的关系
网络安全十大品牌
plus怎么连接sql数据库
https 服务器
机器人怎么做软件开发
小宇服务器管理员工具解压密码
监控服务器管理
网络安全法怎样保护个人隐私
语嫣网络技术服务部
依靠信息技术和网络技术
战地3 正在加入服务器
网络安全宣传活动成都
服务器asp
网络安全密匙如何修改
游戏连接服务器
和龙软件开发有哪些公司
服务器安全管理建议
金蝶数据库查凭证
工商银行网络安全自查情况报告
服务器做文具管理系统
餐盟网络技术有限公司
湖南数据软件开发服务推广
迅合科技微型网络服务器
陕西中小学网络安全课程
国家网络安全宣传周金融活动
国开数据库运维概述自测
网络安全法治监督体系
国网网络安全防护
辅助管理服务器