易哥,高级软件架构师、网络工程师、数据库工程师、注册电气工程师。
我们开发的业务系统通常会提供给很多人使用,那在使用的过程中,日志系统变得非常重要。
日志系统记录的用户行为有以下的作用:
- 从系统用户角度看:它展示了用户自身的操作历史和具体对象的变动历史,便于用户进行梳理
- 从系统管理员角度看:它可以记录了所有用户操作,便于我们定位异常行为
例如,在git的project操作中,我们就可以看到这样的操作日志展示:
![fda0e242c2ffa4456cbe78ecdb862aac.png](https://img-blog.csdnimg.cn/img_convert/fda0e242c2ffa4456cbe78ecdb862aac.png)
对于这样的日志记录,我们可以在相关记录点添加对应的日志写入代码或者通过切面实现。然而,这样的日志展示是相对简单的,只是记录了操作行为的种类。而有时我们需要记录每个操作行为对操作对象引发的具体变动,例如展示出这样的结果:
![df1d6c41f55c94661807d033dd485cc5.gif](https://img-blog.csdnimg.cn/img_convert/df1d6c41f55c94661807d033dd485cc5.gif)
这给日志记录带来了不小的挑战:
- 在一个系统中,可能涉及到多种对象(例如,学生、课程、老师),而每个对象的属性是完全不一样的
- 在一次操作中,可能改变了对象的一个或者多个属性,这也使得我们极难逐一记录
而今天,我们要介绍的是一套强大且易用的Java对象日志记录系统,支持对象属性变动的记录与查询。借助于它,我们可以方便地实现对象属性变动的记录与查询。
1 系统简介
ObjectLogger是一套强大且易用的对象日志记录系统。它能够将任意对象的变动日志记录下来,并支持查询。可以应用在用户操作日志记录、对象属性变更记录等诸多场景中。
该系统具有以下特点:
- 一站整合:系统支持日志的记录与查询,开发者只需再开发前端界面即可使用。
- 完全独立:与业务系统无耦合,可插拔使用,不影响主业务流程。
- 应用共享:系统可以同时供多个业务系统使用,互不影响。
- 简单易用:服务端直接jar包启动;业务系统有官方Maven插件支持。
- 自动解析:能自动解析对象的属性变化,并支持富文本的前后对比。
- 便于扩展:支持自定义对象变动说明、属性变动说明。支持更多对象属性类型的扩展。
整个项目包含四个部分:
- ObjectLoggerClient:能够集成到业务系统进行日志分析、发送jar包。可以从Maven官方仓库引入该jar包。该模块位于client子包下。
- ObjectLoggerServer:一个web服务,需要数据库的支持。它能够接收并保存ObjectLoggerClient发出的日志信息,支持日志的查询操作。该模块位于server子包下。
- react-object-logger:一个React前端组件,用于进行日志的前端展示。可以从npm官方仓库引入该组件。该子项目位于react-object-logger。
- ObjectLoggerDemo:一个业务端集成ObjectLoggerClient的示例。该模块位于demo子包下。
2 快速上手
2.1 创建数据库
使用该项目的/server/database/init_data_table.sql文件初始化两个数据表。
2.2 启动Server
下载该项目下最新的Server服务jar包,地址为/server/target/ObjectLoggerServer-*.jar。
启动下载的jar包。
java -jar ObjectLoggerServer-*.jar --spring.datasource.url=jdbc:{db}://{db_address}/{db_name} --spring.datasource.username={db_username} --spring.datasource.password={db_password}
上述命令中的用户配置项说明如下:
- db:数据库类型。如果使用MySql数据库则为mysql;如果使用SqlServer数据库则为sqlserver。
- db_address:数据库连接地址。如果数据库在本机则为127.0.0.1。
- db_name:数据库名,该数据库中需包含上一步初始化的两个数据表。
- db_username:数据库登录用户名。
- db_password:数据库登录密码。
启动jar成功后可以看到下面的界面:
![833e8cd0c24b331962843fdac2495b22.png](https://img-blog.csdnimg.cn/img_convert/833e8cd0c24b331962843fdac2495b22.png)
使用浏览器访问下面的页面可以看到系统欢迎页面:
http://127.0.0.1:12301/ObjectLoggerServer/
访问上述地址可以看到下面的欢迎界面:
![13f2cd8c58eb194be5f5bb75bbd0891e.png](https://img-blog.csdnimg.cn/img_convert/13f2cd8c58eb194be5f5bb75bbd0891e.png)
至此,ObjectLoggerServer系统已经搭建结束,可以接受业务系统的日志写入和查询操作。
3 业务系统接入
该部分讲解如何配置业务系统来将业务系统中的对象变化通过ObjectLoggerClient分析,然后记录到ObjectLoggerServer中。
这一部分的使用可以参照ObjectLoggerDemo项目,该项目给出了业务系统集成ObjectLoggerClient的详细示例。ObjectLoggerDemo的制品包可以从/demo/target/ObjectLoggerDemo-*.jar获得,无需其他配置直接运行java -jar ObjectLoggerDemo-*.jar便可以直接启动该项目。
可以直接根据启动页面的提示访问相关地址来体验:
![3114ed0c32d919152ec9bed9632ecba6.png](https://img-blog.csdnimg.cn/img_convert/3114ed0c32d919152ec9bed9632ecba6.png)
3.1 引入依赖包
在pom中增加下面的依赖:
com.github.yeecode.objectlogger ObjectLoggerClient {最新版本}
3.2 添加对ObjectLoggerClient中bean的自动注入
3.2.1 对于SpringBoot应用
在SpringBoot的启动类前添加@ComponentScan注解,并在basePackages中增加ObjectLoggerClient的包地址:com.github.yeecode.objectlogger,如:
@SpringBootApplication@ComponentScan(basePackages={"{your_beans_root}