易哥,高级软件架构师、网络工程师、数据库工程师、注册电气工程师。现从事软件架构架构设计工作。
我们开发的业务系统通常会提供给很多人使用,那在使用的过程中,日志系统变得非常重要。
日志系统记录的用户行为有以下的作用:
从系统用户角度看:它展示了用户自身的操作历史和具体对象的变动历史,便于用户进行梳理从系统管理员角度看:它可以记录了所有用户操作,便于我们定位异常行为例如,在git的project操作中,我们就可以看到这样的操作日志展示:
对于这样的日志记录,我们可以在相关记录点添加对应的日志写入代码或者通过切面实现。然而,这样的日志展示是相对简单的,只是记录了操作行为的种类。而有时我们需要记录每个操作行为对操作对象引发的具体变动,例如展示出这样的结果:
这给日志记录带来了不小的挑战:
在一个系统中,可能涉及到多种对象(例如,学生、课程、老师),而每个对象的属性是完全不一样的在一次操作中,可能改变了对象的一个或者多个属性,这也使得我们极难逐一记录而今天,我们要介绍的是一套强大且易用的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-jarObjectLoggerServer-*.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`:数据库连接地址。如果数据库在本机则为`.0.0.1`。`db_name`:数据库名,该数据库中需包含上一步初始化的两个数据表。`db_username`:数据库登录用户名。`db_password`:数据库登录密码。启动jar成功后可以看到下面的界面:
使用浏览器访问下面的页面可以看到系统欢迎页面:
```