# V-LoggingTool
**Repository Path**: Xxianglei/V-LoggingTool
## Basic Information
- **Project Name**: V-LoggingTool
- **Description**: V-LoggingTool 1.0版本,基于自动配置和AOP技术,实现低侵入的用户操作的拦截、存储、分发功能。
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 2
- **Forks**: 0
- **Created**: 2020-08-23
- **Last Updated**: 2021-04-27
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
### V-LoggingTool
V-LoggingTool 1.0版本,基于自动配置和AOP技术,实现低侵入的用户操作的拦截、存储、分发功能。
欢迎 **start / fork!**
### 目的意义
该仓库目的主要意义是在于小白学习和实现小项目快速开发。
- 开箱即用,满足一般场景日志系统需求
- 提供基于SpringBoot自动配置手写starter案例
- 提供Aop在日志拦截系统场景中的使用案例
- 提供SpringBoot异步线程池使用案例
- 提供SpringBoot集成MyBatis-Plus使用案例
### 功能支持
- Mysql数据库存储 -- 支持异步
- 发送到消息中间件 -- RocketMQ
- 自定义本地文件存储 -- 24小时归档
### 设计思想
- 思想:给予用户配置权限
- 思想:默认配置
- 思想:声明大于配置
- 思想:多态分发
### 已实现
@VLogHunter(logType = AuditLogTypeEnum.ACCOUNT_MANAGE, description = "日志列表查看操作", name = "日志列表查看")
可使用@VLogHunter注解在 **Controller** 或 **全局异常处理** 方法中,进行用户访问访问日志的生成和存储。
- 支持Mysql数据库
- 支持HikariCP连接池
- 支持C3P0连接池
- 支持本地文件存储
- 支持日志发送MQ
### 优点与不足
- 优点
- 快
- 不足
- 返回值必须是 CommonResponse \ 包括全局异常
- 需要在session中需要存储当前访问用户的userName属性,该值会作为入库的用户名,否则为null
对于已存在的不足点后期会**持续跟进和改善代码逻辑**,因为这个逻辑是为了满足个人开发需求,懒得去改成通用的其次意义也不大。
如果你目前无法接受就只能移步其他仓库。
目前支持Mysql5.0及以上版本,请注意版本兼容性。
### 使用说明
#### Maven
```xml
com.github
log-capture-tool
1.0.0
github
BB zebra
https://raw.github.com/Xxianglei/maven-repository/master
```
如果拉取失败
- 请先删除本地仓库路径下的log-capture-tool
- 参照[解决GitHub的raw.githubusercontent.com无法连接问题](https://www.cnblogs.com/sinferwu/p/12726833.html) 处理hosts
- 再次拉取依赖
#### 配置说明
> 由于SpringBoot2.0 默认支持HikariCP,DHCP等,本项目选择以C3P0连接池做一个SpringBoot自动装配的开发案例。
- C3P0连接池
根据自己所需选择对应配置即可。

- 全局动态配置
```yaml
v-log:
file:
# 是否开启本地文件存储 默认 false
fileOpen: true
# 是否发送消息到RocketMQ
mqOpen: false
# 文件格式(文件命名规则)
nameFormat: yyyyMMddHHmmss
# 文件格式(仅支持文本文件)
extName: .txt
# 日志文件存储路径(支持linux,windows) 默认 C:\\logs 或 /usr/local
storeFilePath: D:\\logs
thread:
# 线程池配置
corePoolSize: 1
# 最大线程数
maxPoolSize: 5
# 线程池队列大小
queueCapacity: 10
```
你还需要配置MQ的相关配置项目如下,如果开启了mq-open: true,日志消息将会发送到MQ
```yaml
rocketmq:
name-server: 你的IP:9876
producer:
group: log-group
# 可自定义配置 默认 v-log-topic
topic: xxx
```
### 使用案例
- pom.xml
```xml
4.0.0
org.springframework.boot
spring-boot-starter-parent
2.3.1.RELEASE
com.example
demo
0.0.1-SNAPSHOT
demo
Demo project for Spring Boot
1.8
3.3.2
5.0.7
org.springframework.boot
spring-boot-starter-web
org.mybatis.spring.boot
mybatis-spring-boot-starter
2.1.3
mysql
mysql-connector-java
runtime
${mysql.version}
org.projectlombok
lombok
true
com.baomidou
mybatis-plus-boot-starter
true
${mybatis-plus.version}
com.baomidou
mybatis-plus-generator
true
${mybatis-plus.version}
com.github
log-capture-tool
1.0.0
org.apache.rocketmq
rocketmq-spring-boot-starter
2.0.3
org.springframework.boot
spring-boot-maven-plugin
github
BB zebra
https://raw.github.com/Xxianglei/maven-repository/master
```
- 启动类设置包扫描
```java
// 依赖中Mapper路径
@MapperScan("com.xianglei.mapper")
// 后者是依赖中包路径
@ComponentScan(basePackages = {"com.example.demo", "com.xianglei"})
```
- 手动开启异步线程池
本依赖中已经集成了线程池,你如果需要开启异步处理,只需在主类注入 **@EnableAsync**
- 日志捕捉注解使用
返回给前端JSON格式数据,请默认使用CommonResponse封装,AOP会根据其Code值进行处理。
```java
@RequestMapping("/test")
@VLogHunter(name = "demo",module = VLogHunter.Module.CONTROLLER,method = VLogHunter.MethodType.GET,logType = AuditLogTypeEnum.COMMON_LOG,description = "测试操作")
@ResponseBody
public CommonResponse hello() {
return new CommonResponse();
}
```
必填项:
```java
@VLogHunter(logType = AuditLogTypeEnum.COMMON_LOG, description = "测试操作")
```
其他参数暂时还没作为持久化的必要数据,如有需要可以自己二次封装,或者提出issue。
### SQL脚本
```sql
CREATE TABLE `audit_log` (
`flow_id` int NOT NULL AUTO_INCREMENT,
`user_name` varchar(20) DEFAULT NULL,
`login_ip` varchar(20) DEFAULT NULL,
`log_type` varchar(32) DEFAULT NULL,
`details` varchar(64) DEFAULT NULL,
`operation_time` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`flow_id`)
) ;
```
#### Fixed
- Mysql多版本支持