SpringBoot+AOP实现记录操作日志和异常日志,并保存到数据库

您所在的位置:网站首页 股票操作日志怎么写 SpringBoot+AOP实现记录操作日志和异常日志,并保存到数据库

SpringBoot+AOP实现记录操作日志和异常日志,并保存到数据库

2024-07-17 01:16| 来源: 网络整理| 查看: 265

1. 简介

 

  项目中对日志的收集往往是非常重要的,不仅方便开发人员快速定位问题,而且越来越多的客户需要查询用户行为日志、用户审计日志等。因此,在收集日志时,不仅要考虑功能实现,而且要考虑可靠性、稳定性和不耦合性。   在每个操作和每个方法都加上日志处理肯定时不现实的,因此使用Spring提供的AOP原理就变得非常方便。定义好切面以及切点之后,可以非常方便的打印、收集或保存日志,不影响业务性能。

2. 初始化数据库

  创建数据库aop,并初始化表结构:

DROP TABLE IF EXISTS `sys_log`; CREATE TABLE `sys_log` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ID', `log_type` varchar(50) NOT NULL COMMENT '日志类型', `create_user_code` varchar(64) NOT NULL COMMENT '创建用户编码', `create_user_name` varchar(100) NOT NULL COMMENT '创建用户名称', `create_date` datetime NOT NULL COMMENT '创建时间', `request_uri` varchar(500) DEFAULT NULL COMMENT '请求URI', `request_method` varchar(10) DEFAULT NULL COMMENT '请求方式', `request_params` text COMMENT '请求参数', `request_ip` varchar(20) NOT NULL COMMENT '请求IP', `server_address` varchar(50) NOT NULL COMMENT '请求服务器地址', `is_exception` char(1) DEFAULT NULL COMMENT '是否异常', `exception_info` text COMMENT '异常信息', `start_time` datetime NOT NULL COMMENT '开始时间', `end_time` datetime NOT NULL COMMENT '结束时间', `execute_time` int DEFAULT NULL COMMENT '执行时间', `user_agent` varchar(500) DEFAULT NULL COMMENT '用户代理', `device_name` varchar(100) DEFAULT NULL COMMENT '操作系统', `browser_name` varchar(100) DEFAULT NULL COMMENT '浏览器名称', PRIMARY KEY (`id`) USING BTREE, KEY `idx_sys_log_lt` (`log_type`) USING BTREE, KEY `idx_sys_log_cub` (`create_user_code`) USING BTREE, KEY `idx_sys_log_ie` (`is_exception`) USING BTREE, KEY `idx_sys_log_cd` (`create_date`) USING BTREE ) COMMENT='系统日志表';

3. 示例代码

创建项目 修改pom.xml 4.0.0 com.c3stones spring-aop-log-demo 0.0.1-SNAPSHOT spring-aop-log-demo Spring Aop Log Demo org.springframework.boot spring-boot-starter-parent 2.3.4.RELEASE mysql mysql-connector-java com.baomidou mybatis-plus-boot-starter 3.3.2 org.projectlombok lombok true cn.hutool hutool-all 5.5.1 org.springframework.boot spring-boot-starter-aop org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-test test org.springframework.boot spring-boot-maven-plugin 创建配置文件application.yml server: port: 8080 spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://127.0.0.1:3306/aop?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull username: root password: 123456 # Mybatis-plus配置 mybatis-plus: mapper-locations: classpath:mapper/*.xml global-config: db-config: id-type: AUTO # configuration: # # 打印sql # log-impl: org.apache.ibatis.logging.stdout.StdOutImpl 创建公共参数类 /** * 公共常量类 * * @author CL */ public interface Global { /** * 成功标识 */ Boolean TRUE = true; /** * 失败标识 */ Boolean FALSE = false; /** * 是标识 */ String YES = "1"; /** * 否标识 */ String NO = "0"; /** * 日志级别-INFO */ String LOG_INGO = "INFO"; /** * 日志级别-DEBUG */ String LOG_DEBUG = "DEBUG"; /** * 日志级别-ERROR */ String LOG_ERROR = "ERROR"; } 创建工具类 import java.io.Serializable; import com.c3stones.constants.Global; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; import lombok.ToString; import lombok.experimental.Accessors; /** * 响应工具类 * * @param * @author CL */ @ToString @NoArgsConstructor @AllArgsConstructor @Accessors(chain = true) public class R implements Serializable { private static final long serialVersionUID = 1L; @Getter @Setter private Boolean code; @Getter @Setter private String msg; @Getter @Setter private T data; public static R ok() { return restResult(null, Global.TRUE, null); } public static R ok(T data) { return restResult(data, Global.TRUE, null); } public static R ok(T data, String msg) { return restResult(data, Global.TRUE, msg); } public static R failed() { return restResult(null, Global.FALSE, null); } public static R failed(String msg) { return restResult(null, Global.FALSE, msg); } public static R failed(T data) { return restResult(data, Global.FALSE, null); } public static R failed(T data, String msg) { return restResult(data, Global.FALSE, msg); } private static R restResult(T data, Boolean code, String msg) { R apiResult = new R(); apiResult.setCode(code); apiResult.setData(data); apiResult.setMsg(msg); return apiResult; } } /** * 字节转换工具类 * * @author CL */ public class ByteUtils { private static final int UNIT = 1024; /** * 格式化字节大小 * * @param byteSize 字节大小 * @return */ public static String formatByteSize(long byteSize) { if (byteSize


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3