如何快速搭建日志系统

我们开发的业务系统通常会提供给很多人使用,那在使用的过程中,日志系统变得非常重要 。
日志系统记录的用户行为有以下的作用:

  • 从系统用户角度看:它展示了用户自身的操作历史和具体对象的变动历史,便于用户进行梳理
  • 从系统管理员角度看:它可以记录了所有用户操作,便于我们定位异常行为
例如,在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 -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成功后可以看到下面的界面:
如何快速搭建日志系统

文章插图
 
使用浏览器访问下面的页面可以看到系统欢迎页面:
http://127.0.0.1:12301/ObjectLoggerServer/访问上述地址可以看到下面的欢迎界面:
如何快速搭建日志系统

文章插图
 
至此,ObjectLoggerServer系统已经搭建结束,可以接受业务系统的日志写入和查询操作 。
3 业务系统接入该部分讲解如何配置业务系统来将业务系统中的对象变化通过ObjectLoggerClient分析,然后记录到ObjectLoggerServer中 。
这一部分的使用可以参照ObjectLoggerDemo项目,该项目给出了业务系统集成ObjectLoggerClient的详细示例 。ObjectLoggerDemo的制品包可以从/demo/target/ObjectLoggerDemo-*.jar获得,无需其他配置直接运行java -jar ObjectLoggerDemo-*.jar便可以直接启动该项目 。


推荐阅读