spring aop实现日志记录(spring日志文件)

spring aop实现日志记录(spring日志文件)blockquote 提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 目录 文章目录 前言 一 aop 是什么 二 使用步骤 1 引入库 2 读入数据 总结 二 使用步骤 1 引入库 2 读入数据 总结 Spring AOP 简介 Spring AOP Aspect Oriented blockquote

大家好,我是讯享网,很高兴认识大家。



 <blockquote> 

讯享网

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言

    目录

    文章目录

    前言

    一、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 &#61; LoggerFactory.getLogger(SysLogAspect.class); private final EventPubListener eventPubListener; / * 以注解所标注的方法作为切入点 */ &#64;Pointcut(&#34;&#64;annotation(com.xiaogung.logs.annotation.Log)&#34;) public void sysLog() {} / * 在切点之后织入 * &#64;throws Throwable */ &#64;After(&#34;sysLog()&#34;) public void doAfter(JoinPoint joinPoint) { Log log &#61; ((MethodSignature) joinPoint.getSignature()).getMethod() .getAnnotation(Log.class); ServletRequestAttributes attributes &#61; (ServletRequestAttributes) RequestContextHolder .getRequestAttributes(); HttpServletRequest request &#61; attributes.getRequest(); String method &#61; request.getMethod(); String url &#61; request.getRequestURL().toString(); String ip &#61; IpUtils.getIpAddr(request); SysLog sysLog &#61; 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(&#34;Authorization&#34;)!&#61;null){ SysUser userInfo&#61; jwtTokenUtil.getUserNameFromToken(request.getHeader(&#34;Authorization&#34;)); sysLog.setOperName(userInfo.getUserName()); } sysLog.setOperTime(new Date()); // 发布消息 eventPubListener.pushListener(sysLog); logger.info(&#34;&#61;&#61;&#61;&#61;&#61;&#61;&#61;日志发送成功&#xff0c;内容&#xff1a;{}&#34;,sysLog); } 
} 这里我没有使用异步
讯享网@Log(value = “用户登录”,title = “用户登录”,method = “POST”,businessType = BusinessTypeEnum.SELECT) @PostMapping(“/login”) @Operation(summary = “用户登录”) public Result login(@RequestBody SysUserDTO sysUserDTO){ 
log.info(&#34;用户登录{}&#34;,sysUserDTO); 
loginVo s= sysUserService.login(sysUserDTO);
讯享网return Result.SUCCESS(s); 
}

展示结果

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

成功了是不是很简单信息所有人都可以


如果没有成功看看是不是依赖冲突,解决办法修改依赖版本。

小讯
上一篇 2025-06-02 10:31
下一篇 2025-06-02 15:46

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/159893.html