成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

SpringBoot實戰:輕松使用AOP+注解實現操作日志記錄

開發 前端
通過上述步驟,我們利用AOP和自定義注解在SpringBoot應用中實現了操作日志的記錄。這種方式不僅減少了代碼冗余,提高了開發效率,還增強了系統的可維護性和可擴展性。

引言

在企業應用開發中,操作日志記錄是確保系統安全性、可追溯性以及調試分析的重要手段之一。通過記錄用戶的操作行為,不僅可以幫助開發者快速定位問題,還能滿足審計和合規需求。本文旨在探討如何在SpringBoot應用程序中通過AOP(面向切面編程)和自定義注解實現操作日志記錄,并將日志存儲到數據庫中。

AOP簡介

AOP(Aspect Oriented Programming)面向切面編程,是對OOP(Object-Oriented Programming)的一種補充。它允許開發者在不修改源代碼的情況下增加額外的功能,如日志記錄、事務管理、權限控制等。在SpringBoot中,AOP通過注解和動態代理實現,極大地簡化了橫切關注點的管理。

環境準備

  • JDK版本:JDK 17
  • Spring Boot版本:Spring Boot 3.2.2
  • MySQL版本:8.0.37
  • 構建工具:Maven

確保項目中包含Spring AOP的依賴:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-aop</artifactId>
</dependency>

數據庫設計

首先,需要創建一個操作日志記錄表,用于存儲日志信息。以下是一個簡單的操作日志表結構示例:

CREATE TABLE `sys_oper_log` (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `title` varchar(50) DEFAULT NULL COMMENT '模塊標題',
  `business_type` varchar(20) DEFAULT NULL COMMENT '業務類型',
  `method` varchar(100) DEFAULT NULL COMMENT '方法名稱',
  `request_method` varchar(10) DEFAULT NULL COMMENT '請求方式',
  `operator_type` varchar(10) DEFAULT NULL COMMENT '操作類別',
  `oper_name` varchar(50) DEFAULT NULL COMMENT '操作人員',
  `oper_url` varchar(255) DEFAULT NULL COMMENT '請求URL',
  `oper_ip` varchar(50) DEFAULT NULL COMMENT '主機地址',
  `oper_param` text COMMENT '請求參數',
  `json_result` text COMMENT '返回參數',
  `status` int DEFAULT NULL COMMENT '操作狀態',
  `error_msg` varchar(200) DEFAULT NULL COMMENT '錯誤消息',
  `oper_time` datetime DEFAULT NULL COMMENT '操作時間',
  `execute_time` bigint DEFAULT NULL COMMENT '執行時長',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='操作日志記錄';

創建實體類

對應上述數據庫表,創建一個系統日志實體類SysOperLog,使用Lombok簡化代碼:

@Data
@Schema(description = "操作日志記錄")
@TableName(value = "sys_oper_log")
public class SysOperLog implements Serializable {
    // 省略字段定義,參考數據庫表結構
}

創建注解

定義一個自定義注解@Log,用于標記需要記錄日志的方法:

@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Log {
    String title() default "";
    BusinessType businessType() default BusinessType.OTHER;
    boolean isSaveRequestData() default true;
    boolean isSaveResponseData() default true;
    String[] excludeParamNames() default {};
}

// 業務操作類型枚舉
public enum BusinessType {
    OTHER, INSERT, UPDATE, DELETE
    // 可根據實際需要擴展
}

創建切面類

使用@Aspect注解定義一個切面類LogAspect,用于攔截帶有@Log注解的方法,并記錄日志:

@Aspect
@Component
public class LogAspect {

    @Autowired
    private SysOperLogService sysOperLogService; // 假設的日志服務

    @Pointcut("@annotation(com.example.demo.annotation.Log)")
    public void logPointcut() {}

    @Around("logPointcut()")
    public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
        long startTime = System.currentTimeMillis();
        Object result = joinPoint.proceed();
        long executeTime = System.currentTimeMillis() - startTime;

        // 收集日志信息,這里僅為示例
        MethodSignature signature = (MethodSignature) joinPoint.getSignature();
        Log logAnnotation = signature.getMethod().getAnnotation(Log.class);
        // 省略日志信息組裝過程

        // 保存日志
        sysOperLogService.saveLog(log); // 假設的保存日志方法

        return result;
    }
}

注意:這里的saveLog方法需要根據實際業務邏輯進行實現,包括日志信息的詳細組裝和數據庫保存操作。

使用注解

在需要記錄日志的方法上添加@Log注解:

@Service
public class SomeService {

    @Log(title = "用戶管理", businessType = BusinessType.UPDATE)
    public void updateUserInfo(UserInfo userInfo) {
        // 業務邏輯
    }
}

總結

通過上述步驟,我們利用AOP和自定義注解在SpringBoot應用中實現了操作日志的記錄。這種方式不僅減少了代碼冗余,提高了開發效率,還增強了系統的可維護性和可擴展性。希望本文對你在實際開發中的日志記錄工作有所幫助。

責任編輯:武曉燕 來源: 程序員編程日記
相關推薦

2023-03-06 11:36:13

SpingBoot注解

2021-03-01 23:26:41

日志Spring BootAOP

2022-02-08 17:07:54

Spring BooSpring Aop日志記錄

2024-08-26 08:27:18

2024-12-23 13:31:38

2023-03-30 07:48:46

接口鑒權SpringBoot

2023-03-03 09:11:12

高并發SpringBoot

2022-12-13 09:19:06

高并發SpringBoot

2022-02-17 13:39:09

AOP接口方式

2022-06-14 10:47:27

項目日志PUT

2024-11-25 12:00:00

C#日志記錄器

2024-06-14 09:30:58

2024-01-04 07:55:32

系統操作日志接口

2021-02-03 05:24:44

API日志

2024-11-22 09:21:18

WinForm

2021-02-14 20:41:56

API日志web

2009-09-14 10:29:02

LINQ刪除記錄

2024-12-20 17:29:34

SpringBootAOP開發

2024-09-11 08:35:54

2024-02-29 08:52:31

PostgreSQL數據分析GROUP BY
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲经典一区 | www.五月天婷婷.com | av网站观看 | 欧美在线播放一区 | 日韩精品一区二区三区视频播放 | 久久99精品国产麻豆婷婷 | 另类 综合 日韩 欧美 亚洲 | 欧美精品日韩精品国产精品 | 国产综合视频 | 蜜桃视频在线观看免费视频网站www | 精品伦精品一区二区三区视频 | 午夜精品一区二区三区在线视频 | 日本字幕在线观看 | 国产成人精品午夜 | 亚洲日韩中文字幕一区 | 色站综合 | 99精品国自产在线 | 操人网 | 日韩无| 久久69精品久久久久久国产越南 | 日韩在线免费视频 | 欧美综合一区二区三区 | 成人在线观看亚洲 | 91在线网站 | 美女视频一区二区三区 | 大香在线伊779 | 久久视频免费观看 | 久久久久久亚洲 | 亚洲免费一区二区 | 国产视频在线观看一区二区三区 | 色婷婷综合久久久中字幕精品久久 | 国产精品我不卡 | 欧美日韩在线观看一区 | 一级爱爱片 | 天天操天天摸天天干 | 一区二区三区中文字幕 | 一区视频 | 日韩在线 | 亚洲欧美日韩在线一区二区 | 成人精品毛片国产亚洲av十九禁 | 国产精品视频999 |