月之氏族的gravatar头像
月之氏族2019-12-08 22:42:44

Spring Boot简单而又强大的AOP异步日志注解系统

项目描述

一个使用方法很简单,功能很强大的AOP异步的日志系统

通常来说你只需要简单的3个步骤就可以在你原有的SpringBoot项目上集成该日志系统

运行环境

jdk8+tomcat9+mysql 7+IntelliJ IDEA+maven

项目技术(必填)

spring+spring boot+mybatis+layui+jquery

数据库文件

可以自定义数据库字段,这里提供的log.sql仅供参考(sql文件在项目 resources/sql/log.sql)
链接:https://pan.baidu.com/s/1274ilSshHESUu0EUEN8mNw
提取码:p12d

jar包文件

使用maven自行下载

链接:https://pan.baidu.com/s/1BCLdz6eLdSyP3QtxrecWDg
提取码:eklg

是否原创(转载必填原文地址)

原创

项目截图(必填)

Spring Boot简单而又强大的AOP异步日志注解系统

运行截图(必填)

上面接收的操作日志运行结果

Spring Boot简单而又强大的AOP异步日志注解系统

下面是 demo 运行结果

http://localhost:8071/opLog  运行结果

Spring Boot简单而又强大的AOP异步日志注解系统

Spring Boot简单而又强大的AOP异步日志注解系统

http://localhost:8071/accessLog  运行结果

Spring Boot简单而又强大的AOP异步日志注解系统

Spring Boot简单而又强大的AOP异步日志注解系统

Spring Boot简单而又强大的AOP异步日志注解系统

Spring Boot简单而又强大的AOP异步日志注解系统Spring Boot简单而又强大的AOP异步日志注解系统

http://localhost:8071/docs.html运行结果

api接口说明文档

Spring Boot简单而又强大的AOP异步日志注解系统

请求示例

Spring Boot简单而又强大的AOP异步日志注解系统

注意事项

1.这里的SQL、页面 都是一个示例 , 可以根据实际情况调整

2.示例的 log.sql 里面拥有 JSON 字段 , 需要mysql版本最低为 5.7

3.示例的 mysql 存储的 ip地址 使用的是 bigint 字段 ,在存入是 使用 INET_ATON() 函数 将 IP 地址转换为 十进制 整数 , 取出是 使用  INET_NTOA() 函数 将 整数转换为IP地址

4.如果你需要单独的获取IP地址实际地理位置的话 , 可以使用 IpUtils 类 ,它提供了如下的三种算法

Spring Boot简单而又强大的AOP异步日志注解系统

之后会返回一个 Region 实体类 ,它包含了 国家、省份、城市、isp(互联网服务提供商)

获取到的地理位置,仅供参考

Spring Boot简单而又强大的AOP异步日志注解系统

5.项目运行步骤

第一步:你需要在合适的位置使用

@ComponentScan(basePackages = { "cn.novelweb"})

指定SpringBoot扫描需要扫描的包,这个注解通常和 @Configuration 这个注解一起使用

Spring Boot简单而又强大的AOP异步日志注解系统

第二步:在你认为合适的位置使用注解

这里提供了两个注解,分别为:@AccessLog(访问日志)、@OpLog(操作日志)

@AccessLog:

这个注解通常是使用在访问页面的地方,如:xxx页面被ip为:xxx的访问了

注解里面提供一个 String title(模块标题) 和 boolean isGetIp(是否需要获取访问IP的真实地理位置)

title 默认为 "" , 自己定义的页面的名称 ,这个通常是写 xxx页面、xxx列表

isGetIp 默认为 true , 默认情况下 系统会自动查询获取到的ip地址的 真实地理位置,但是这个操作 需要耗费一定的时间,一般平均在 60ms~70ms 左右

请根据实际情况选择是否需要开启 ,不需要的话设置为false就好了(获取到的IP地理位置 仅供参考)

Spring Boot简单而又强大的AOP异步日志注解系统

@OpLog:

这个注解通常是使用在api接口上面的 , 如:管理员 admin 对 用户列表 进行了 删除 操作

当然其中的 管理员 admin 需要你自己实现

注解里面提供四个方法分别是: String title(模块标题) 、String businessType(业务类型)、

boolean isSaveRequestData(是否需要保存URL的请求参数)、 boolean isGetIp(是否需要获取访问IP的真实地理位置)

其中的 title、isGetIp 功能同@AccessLog

isSaveRequestData 默认为 true,默认情况下使用 操作日志注解 会自动获取 当前 url 的 请求参数

请根据实际情况选择是否需要获取 url 的 请求参数

businessType 默认为 FixedBusinessType.OTHER(="其他") ,  自定义当前正在操作的业务类型 如:新增、删除、导入、导出 等等

这里的FixedBusinessType类提供了一些默认的选项

Spring Boot简单而又强大的AOP异步日志注解系统

@OpLog通常是放在api接口上的

Spring Boot简单而又强大的AOP异步日志注解系统

第三步:接收日志系统的异步处理结果

这里的两个日志注解需要分别实现对应的接口

接收 @AccessLog 需要实现 AccessLogCompletionHandler

接收 @OpLog  需要实现 OpLogCompletionHandler

在这里你可以将接收到的处理结果存入MySQL、Redis、MongoDB等等,用来持久化日志

也可以在这里组装一些你需要存储的自定义的字段,比如 当前登录的用户信息

这里我以持久化到MySQL为例

接收 @AccessLog

Spring Boot简单而又强大的AOP异步日志注解系统

接收 @OpLog

Spring Boot简单而又强大的AOP异步日志注解系统

这里的OpLogInfo继承自AccessLogInfo,OpLogInfo 比 AccessLogInfo 多了一些字段

Spring Boot简单而又强大的AOP异步日志注解系统

你可以组装你自己的实体类 ,选取你所需要的字段 存储


打赏

已有1人打赏

最代码官方的gravatar头像

文件名:logAnnotate.zip,文件大小:49.572K下载
顶部客服微信二维码底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友