如何快速搭建日志系统( 二 )


可以直接根据启动页面的提示访问相关地址来体验:

如何快速搭建日志系统

文章插图
 
3.1 引入依赖包
在pom中增加下面的依赖:
<dependency> <groupId>com.github.yeecode.objectlogger</groupId> <artifactId>ObjectLoggerClient</artifactId> <version>{最新版本}</version></dependency>3.2 添加对ObjectLoggerClient中bean的自动注入
3.2.1 对于SpringBoot应用
在SpringBoot的启动类前添加@ComponentScan注解,并在basePackages中增加ObjectLoggerClient的包地址:com.github.yeecode.objectlogger,如:
@SpringBootApplication@ComponentScan(basePackages={"{your_beans_root}","com.github.yeecode.objectlogger"})public class MyBootAppApplication {public static void main(String[] args) { // 省略其他代码 }}3.2.2 对于Spring应用
在applicationContext.xml增加对ObjectLoggerClient包地址的扫描:
<context:component-scan base-package="com.github.yeecode.objectlogger"></context:component-scan>3.3 完成配置
在application.properties中增加:
yeecode.objectLogger.serverAddress=http://{ObjectLoggerServer_address}yeecode.objectLogger.businessAppName={your_app_name}yeecode.objectLogger.autoLogAttributes=true
  • ObjectLoggerServer_address:属性指向上一步的ObjectLoggerServer的部署地址,例如:127.0.0.1:12301
  • your_app_name:指当前业务系统的应用名 。以便于区分日志来源,实现同时支持多个业务系统
  • yeecode.objectLogger.autoLogAttributes:是否对对象的所有属性进行变更日志记录
至此,业务系统的配置完成 。已经实现了和ObjectLoggerServer端的对接 。
4 日志查询系统运行后,可以通过http://127.0.0.1:12301/ObjectLoggerServer/log/query查询系统中记录的日志,并通过传入参数对日志进行过滤 。
如何快速搭建日志系统

文章插图
 
通过这里,我们可以查询下一步中写入的日志 。
5 日志展示ObjectLogger有前端React组件react-object-logger支持,用于进行日志信息的展示 。体验页面:react-object-logger 示例页面
展示效果如图:
如何快速搭建日志系统

文章插图
 
感兴趣的用户可以前往react-object-logger进行了解 。
同时也欢迎各位开发者开发面向其它前端技术栈的组件 。
6 日志写入业务系统在任何需要进行日志记录的类中引入LogClient 。例如:
@Autowiredprivate LogClient logClient;6.1 简单使用
直接将对象的零个、一个、多个属性变化放入List<BaseAttributeModel>后调用logAttributes方法发出即可 。List<BaseAttributeModel>置为null则表示此次对象无需要记录的属性变动 。例如,业务应用中调用:
logClient.logAttributes( "CleanRoomTask", 5, "Tom", "add", "Add New Task", "Create a cleanRoomTask", "taskName is :Demo Task", null);在ObjectLoggerServer中使用如下查询条件:
http://127.0.0.1:12301/ObjectLoggerServer/log/query?appName=ObjectLoggerDemo&objectName=CleanRoomTask&objectId=5查询到日志:
{ "respMsg": "SUCCESS", "respData": [ { "id": 1, "appName": "ObjectLoggerDemo", "objectName": "CleanRoomTask", "objectId": 5, "operator": "Jone", "operationName": "start", "operationAlias": "Start a Task", "extraWords": "Begin to clean room...", "comment": "Come on and start cleaning up.", "operationTime": "2019-07-04T06:53:40.000+0000", "attributeModelList": [ { "attributeType": "NORMAL", "attributeName": "status", "attributeAlias": "Status", "oldValue": "TODO", "newValue": "DOING", "diffValue": null, "id": 1, "operationId": 1 } ] } ], "respCode": "1000"}6.2 对象变动自动记录
该功能可以自动完成新老对象的对比,并根据对比结果,将多个属性变动一起写入日志系统中 。使用时,要确保传入的新老对象属于同一个类 。
例如,业务系统这样调用:
CleanRoomTask oldTask = new CleanRoomTask();oldTask.setId(5);oldTask.setTaskName("Demo Task");oldTask.setStatus("TODO");oldTask.setDescription("Do something...");CleanRoomTask newTask = new CleanRoomTask();newTask.setId(5);newTask.setTaskName("Demo Task");newTask.setStatus("DOING");newTask.setDescription("The main job is to clean the floor.");newTask.setAddress("Sunny Street");newTask.setRoomNumber(702);logClient.logObject( cleanRoomTask.getId().toString(), "Tom", "update", "Update a Task", null, null, oldTask, newTask);


推荐阅读