成人免费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

2022-02-17 13:39:09

AOP接口方式

2024-11-25 12:00:00

C#日志記錄器

2023-03-03 09:11:12

高并發SpringBoot

2022-12-13 09:19:06

高并發SpringBoot

2024-06-14 09:30:58

2022-06-14 10:47:27

項目日志PUT

2021-02-03 05:24:44

API日志

2024-01-04 07:55:32

系統操作日志接口

2024-11-22 09:21:18

WinForm

2024-09-11 08:35:54

2021-02-14 20:41:56

API日志web

2009-09-14 10:29:02

LINQ刪除記錄

2024-12-20 17:29:34

SpringBootAOP開發

2024-02-29 08:52:31

PostgreSQL數據分析GROUP BY
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久噜噜噜精品国产亚洲综合 | 日日干日日色 | 国产精品视频久久久 | 不卡一区二区三区四区 | 99精品国产一区二区青青牛奶 | 国产一区二区三区 | 中文字幕精 | 成人av鲁丝片一区二区小说 | 自拍偷拍亚洲欧美 | 久久久久久久久久久久91 | 精品国产一区二区在线 | 成年人在线观看 | 国产午夜精品视频 | 亚洲国产第一页 | 久久久国产一区 | 在线国产一区二区 | a级在线 | 一区二区三区中文字幕 | 成人国产一区二区三区精品麻豆 | 一区在线视频 | 特级毛片| 午夜亚洲| 国产一区二区不卡 | 欧美成人第一页 | 欧美在线色 | 国产精品久久777777 | 成人精品国产 | 国产精品久久久久久久久久久久久久 | 久久99精品久久久久久噜噜 | 国产日韩欧美 | 日本高清视频在线播放 | 成人欧美日韩一区二区三区 | 国产在线观看福利 | 91在线视频播放 | 九九福利| 久久久久久国产精品免费免费 | 亚洲人久久| 亚洲国产成人精品女人久久久野战 | 九九伦理电影 | 亚洲国产精品精华素 | 欧美久操网 |