SpringBoot+AOP实现记录操作⽇志和异常⽇志,并保存到数
据库
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. ⽰例代码
创建项⽬
修改l
<project xmlns="/POM/4.0.0"
xmlns:xsi="/2001/XMLSchema-instance"
xsi:schemaLocation="/POM/4.0.0 /xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion>
<groupId>com.c3stones</groupId>
<artifactId>spring-aop-log-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>spring-aop-log-demo</name>
<description>Spring Aop Log Demo</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.4.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.3.2</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.5.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
创建配置⽂件l
server:
port: 8080
spring:
datasource:
driver-class-name: sql.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
springboot aop#      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 stants.Global;
import lombok.AllArgsConstructor; import lombok.Getter;
import lombok.NoArgsConstructor; import lombok.Setter;
import lombok.ToString;
perimental.Accessors;
/
**
* 响应⼯具类
*
* @param <T>
* @author CL
*/

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。