提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
目录
文章目录
前言
一、aop是什么
二、使用步骤
1.引入库
2.读入数据
总结
- 二、使用步骤
- 1.引入库
- 2.读入数据
- 总结
Spring AOP 简介
二、为什么使用 Spring AOP?
关注点分离:将业务逻辑与横切关注点分离,使代码更加清晰和模块化。
代码复用:横切关注点可以被多个业务模块重用,减少重复代码。
增强功能:通过切面(Aspect)可以在不修改原有代码的情况下,动态地增加新的功能。
简化开发:Spring AOP 提供了强大的工具和注解,使得 AOP 编程变得更加简单和直观。
如何在 Spring Boot 项目中使用 Spring AOP?
要在 Spring Boot 项目中使用 Spring AOP,首先需要在项目的 pom.xml 文件中添加 spring-boot-starter-aop 依赖。以下是具体的依赖配置:
代码如下(示例):
代码如下(示例):
package com.xiaogung.logs.annotation; import com.xiaogung.logs.domain.enums.BusinessTypeEnum; import java.lang.annotation.*; / * 自定义操作日志记录注解 * @author qrxm */ @Target(ElementType.METHOD) // 注解只能用于方法 @Retention(RetentionPolicy.RUNTIME) // 修饰注解的生命周期 public @interface Log { String value() default ""; / * 模块 */ String title() default "测试模块"; / * 方法名称 */ String method() default "测试方法"; / * 功能 */ BusinessTypeEnum businessType() default BusinessTypeEnum.OTHER; }
package com.xiaogung.logs.aop; import com.xiaogung.logs.annotation.Log; import com.xiaogung.logs.domain.po.SysLog; import com.xiaogung.logs.listener.EventPubListener; import com.xiaogung.logs.uilts.IpUtils; import com.xiaogung.tool.domain.po.SysUser; import com.xiaogung.tool.utils.JwtTokenUtil; import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.After; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; import org.aspectj.lang.reflect.MethodSignature; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import java.util.Date; @Aspect @Component @RequiredArgsConstructor public class SysLogAspect { private final JwtTokenUtil jwtTokenUtil; private final Logger logger = LoggerFactory.getLogger(SysLogAspect.class); private final EventPubListener eventPubListener; / * 以注解所标注的方法作为切入点 */ @Pointcut("@annotation(com.xiaogung.logs.annotation.Log)") public void sysLog() {} / * 在切点之后织入 * @throws Throwable */ @After("sysLog()") public void doAfter(JoinPoint joinPoint) { Log log = ((MethodSignature) joinPoint.getSignature()).getMethod() .getAnnotation(Log.class); ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder .getRequestAttributes(); HttpServletRequest request = attributes.getRequest(); String method = request.getMethod(); String url = request.getRequestURL().toString(); String ip = IpUtils.getIpAddr(request); SysLog sysLog = new SysLog(); sysLog.setBusinessType(log.businessType().getCode()); sysLog.setTitle(log.title()); sysLog.setMethod(log.method()); sysLog.setRequestMethod(method); sysLog.setOperIp(ip); sysLog.setOperUrl(url); if(request.getHeader("Authorization")!=null){ SysUser userInfo= jwtTokenUtil.getUserNameFromToken(request.getHeader("Authorization")); sysLog.setOperName(userInfo.getUserName()); } sysLog.setOperTime(new Date()); // 发布消息 eventPubListener.pushListener(sysLog); logger.info("=======日志发送成功,内容:{}",sysLog); } } 这里我没有使用异步
@Log(value = "用户登录",title = "用户登录",method = "POST",businessType = BusinessTypeEnum.SELECT) @PostMapping("/login") @Operation(summary = "用户登录") public Result login(@RequestBody SysUserDTO sysUserDTO){ log.info("用户登录{}",sysUserDTO); loginVo s= sysUserService.login(sysUserDTO); return Result.SUCCESS(s); }
展示结果


可以看到日志记录了在看看数据库

成功了是不是很简单信息所有人都可以
如果没有成功看看是不是依赖冲突,解决办法修改依赖版本。
到此这篇spring aop实现日志记录(spring日志文件)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/rfx/47403.html