月之氏族的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 下载
最代码最近下载分享源代码列表最近下载
finklcool 2022年6月6日
暂无贡献等级
crosa_Don  LV18 2022年6月2日
1234mama  LV19 2022年4月5日
黑手疯狂  LV5 2022年1月17日
huaua7676  LV30 2021年11月18日
zzzzzzzzhasdas  LV13 2021年11月9日
尹恒yingying  LV18 2021年10月22日
ma406805131  LV11 2021年3月11日
zlylongyue  LV1 2021年2月1日
zhugc111  LV10 2020年12月31日
最代码最近浏览分享源代码列表最近浏览
3334004690  LV3 3月7日
1358849392  LV21 1月22日
fellowfun  LV12 2023年11月15日
漫步的海星  LV4 2023年9月21日
cwb6357123  LV6 2023年9月21日
skook7  LV2 2023年8月31日
1761434639  LV1 2023年7月2日
呵呵哈哈哈  LV10 2022年9月8日
finklcool 2022年6月6日
暂无贡献等级
crosa_Don  LV18 2022年6月1日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友