ObjectLogger的使用

939 阅读2分钟

此开源项目分为四块,没块功能是:client集成业务系统,server保存日志到数据库,react和demo。

使用方法

1.搭建server:

下载,配置数据库,启动jar。访问http://127.0.0.1:12301/ObjectLoggerServer/ 验证搭建效果。

命令:java -jar ObjectLoggerServer-3.1.1.jar --spring.datasource.driver-class-name=com.mysql.jdbc.Driver --spring.datasource.url=jdbc:mysql://121.****/tempbase --spring.datasource.username=root --spring.datasource.password=**

![](https://tcs-devops.aliyuncs.com/storage/111z76764505397f57e097324756d91c86d2?Signature=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJBcHBJRCI6IjVlNzQ4MmQ2MjE1MjJiZDVjN2Y5YjMzNSIsIl9hcHBJZCI6IjVlNzQ4MmQ2MjE1MjJiZDVjN2Y5YjMzNSIsIl9vcmdhbml6YXRpb25JZCI6IjVlOWQwOTFiZjg5Yzk3MDAwMTRhNTI0OCIsImV4cCI6MTYwNTA1ODY0NCwiaWF0IjoxNjA0NDUzODQ0LCJyZXNvdXJjZSI6Ii9zdG9yYWdlLzExMXo3Njc2NDUwNTM5N2Y1N2UwOTczMjQ3NTZkOTFjODZkMiJ9.ClbN0LebSyXhVrbuCdncJ9RtikUjyhZ8y4BvYiPSe9Q)
![](https://tcs-devops.aliyuncs.com/storage/111z274054fdabb683d79b50658a4c0d0361?Signature=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJBcHBJRCI6IjVlNzQ4MmQ2MjE1MjJiZDVjN2Y5YjMzNSIsIl9hcHBJZCI6IjVlNzQ4MmQ2MjE1MjJiZDVjN2Y5YjMzNSIsIl9vcmdhbml6YXRpb25JZCI6IiIsImV4cCI6MTYwNTA1NzgzOSwiaWF0IjoxNjA0NDUzMDM5LCJyZXNvdXJjZSI6Ii9zdG9yYWdlLzExMXoyNzQwNTRmZGFiYjY4M2Q3OWI1MDY1OGE0YzBkMDM2MSJ9.kp21Kh611qt1xhwJ0v1VDYc2HRGK5HXtaUmCakUDSyg)

2.接入业务系统:

引入最新版本pom

![](https://tcs-devops.aliyuncs.com/storage/111z0f0f61545e6a3d9a84cffdcbcd131ed5?Signature=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJBcHBJRCI6IjVlNzQ4MmQ2MjE1MjJiZDVjN2Y5YjMzNSIsIl9hcHBJZCI6IjVlNzQ4MmQ2MjE1MjJiZDVjN2Y5YjMzNSIsIl9vcmdhbml6YXRpb25JZCI6IiIsImV4cCI6MTYwNTA1NzgzOSwiaWF0IjoxNjA0NDUzMDM5LCJyZXNvdXJjZSI6Ii9zdG9yYWdlLzExMXowZjBmNjE1NDVlNmEzZDlhODRjZmZkY2JjZDEzMWVkNSJ9.68UqIyQtKEpAxaXkc8KVbOE71qKmXQ3nRhbA2MEfZ5k)

配置扫描注解,@ComponentScan(basePackages={"启动类包路径","com.github.yeecode.objectlogger"}) 。

![](https://tcs-devops.aliyuncs.com/storage/111zbab7c3d5d5cfe6cbcc3bdb0a10c58df1?Signature=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJBcHBJRCI6IjVlNzQ4MmQ2MjE1MjJiZDVjN2Y5YjMzNSIsIl9hcHBJZCI6IjVlNzQ4MmQ2MjE1MjJiZDVjN2Y5YjMzNSIsIl9vcmdhbml6YXRpb25JZCI6IiIsImV4cCI6MTYwNTA1NzgzOSwiaWF0IjoxNjA0NDUzMDM5LCJyZXNvdXJjZSI6Ii9zdG9yYWdlLzExMXpiYWI3YzNkNWQ1Y2ZlNmNiY2MzYmRiMGExMGM1OGRmMSJ9.27MNVlf2d8DEtDoqF9VkobVr3yo3wmL2YUZvDKDwcLA)

配置application.properties

yeecode.objectLogger.serverAddress=http://127.0.0.1:12301yeecode.objectLogger.businessAppName=admin-serviceyeecode.objectLogger.autoLogAttributes=truePlain Text
![](https://tcs-devops.aliyuncs.com/storage/111z3a5834ec03ca22e57ec5c07b4c404a62?Signature=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJBcHBJRCI6IjVlNzQ4MmQ2MjE1MjJiZDVjN2Y5YjMzNSIsIl9hcHBJZCI6IjVlNzQ4MmQ2MjE1MjJiZDVjN2Y5YjMzNSIsIl9vcmdhbml6YXRpb25JZCI6IiIsImV4cCI6MTYwNTA1NzgzOSwiaWF0IjoxNjA0NDUzMDM5LCJyZXNvdXJjZSI6Ii9zdG9yYWdlLzExMXozYTU4MzRlYzAzY2EyMmU1N2VjNWMwN2I0YzQwNGE2MiJ9.eCp7u0C0pyEsON8MwlTWd_yi8RH6gLJjQS1tDTNIUZM)

在需要记录日志的类下面引入

@Autowiredprivate LogClient logClient;Plain Text
![](https://tcs-devops.aliyuncs.com/storage/111z482addf0db12643c7dd8845833df1bbc?Signature=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJBcHBJRCI6IjVlNzQ4MmQ2MjE1MjJiZDVjN2Y5YjMzNSIsIl9hcHBJZCI6IjVlNzQ4MmQ2MjE1MjJiZDVjN2Y5YjMzNSIsIl9vcmdhbml6YXRpb25JZCI6IiIsImV4cCI6MTYwNTA1NzgzOSwiaWF0IjoxNjA0NDUzMDM5LCJyZXNvdXJjZSI6Ii9zdG9yYWdlLzExMXo0ODJhZGRmMGRiMTI2NDNjN2RkODg0NTgzM2RmMWJiYyJ9.TFn2oKZ6s15FIIyX3Ctb8oa2HwgMmioAJxbp_djlE1o)

编写写入操作:

属性变化放入List<BaseAttributeModel>后调用logAttributes方法写入

写入实体变花:

先用logClient.deepCopy(task); 保留原来的实体。然后logClient.logObject()将新老实体写入

![](https://tcs-devops.aliyuncs.com/storage/111z0a0374b0209f810a44129193f2fd69ec?Signature=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJBcHBJRCI6IjVlNzQ4MmQ2MjE1MjJiZDVjN2Y5YjMzNSIsIl9hcHBJZCI6IjVlNzQ4MmQ2MjE1MjJiZDVjN2Y5YjMzNSIsIl9vcmdhbml6YXRpb25JZCI6IiIsImV4cCI6MTYwNTA1NzgzOSwiaWF0IjoxNjA0NDUzMDM5LCJyZXNvdXJjZSI6Ii9zdG9yYWdlLzExMXowYTAzNzRiMDIwOWY4MTBhNDQxMjkxOTNmMmZkNjllYyJ9.x15mYOBDetuLihcFf9cZx3NsijI3iergTlC4LjU9yr8)

3.查询

访问http://127.0.0.1:12301/ObjectLoggerServer/log/query 查询所有日志。也可以根据appName服务名称和objectName实体名称和objectId实体id查找。

只有操作没有属性改变的时候

![](https://tcs-devops.aliyuncs.com/storage/111z686176541da16494d4f6d90577b8f299?Signature=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJBcHBJRCI6IjVlNzQ4MmQ2MjE1MjJiZDVjN2Y5YjMzNSIsIl9hcHBJZCI6IjVlNzQ4MmQ2MjE1MjJiZDVjN2Y5YjMzNSIsIl9vcmdhbml6YXRpb25JZCI6IiIsImV4cCI6MTYwNTA1NzgzOSwiaWF0IjoxNjA0NDUzMDM5LCJyZXNvdXJjZSI6Ii9zdG9yYWdlLzExMXo2ODYxNzY1NDFkYTE2NDk0ZDRmNmQ5MDU3N2I4ZjI5OSJ9.8xbWOWZh39t1FGh813u0LN0hMZfDXWGMUJwiRLWb820)

有操作且有属性改变的时候

![](https://tcs-devops.aliyuncs.com/storage/111z47a0415a8f3b52d0e1f8262dd15bd03e?Signature=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJBcHBJRCI6IjVlNzQ4MmQ2MjE1MjJiZDVjN2Y5YjMzNSIsIl9hcHBJZCI6IjVlNzQ4MmQ2MjE1MjJiZDVjN2Y5YjMzNSIsIl9vcmdhbml6YXRpb25JZCI6IiIsImV4cCI6MTYwNTA1NzgzOSwiaWF0IjoxNjA0NDUzMDM5LCJyZXNvdXJjZSI6Ii9zdG9yYWdlLzExMXo0N2EwNDE1YThmM2I1MmQwZTFmODI2MmRkMTViZDAzZSJ9.PN4qZyyY4XXdhFTXfYP1UwJrNR_FV0Kogtx7fWPogoA)

因为我已经执行过几次写入操作和写入实体变化操作,所以能查询到数据。此时的server数据库是这样的

![](https://tcs-devops.aliyuncs.com/storage/111z5ed0bd9cda89bb41f9dcd862ab191db3?Signature=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJBcHBJRCI6IjVlNzQ4MmQ2MjE1MjJiZDVjN2Y5YjMzNSIsIl9hcHBJZCI6IjVlNzQ4MmQ2MjE1MjJiZDVjN2Y5YjMzNSIsIl9vcmdhbml6YXRpb25JZCI6IiIsImV4cCI6MTYwNTA1NzgzOSwiaWF0IjoxNjA0NDUzMDM5LCJyZXNvdXJjZSI6Ii9zdG9yYWdlLzExMXo1ZWQwYmQ5Y2RhODliYjQxZjlkY2Q4NjJhYjE5MWRiMyJ9.L8O0aP6Q_B1LEgD94exiggtvF9MAqwBTc23FBQFENuQ)
![](https://tcs-devops.aliyuncs.com/storage/111z3a67eddd8422a0ac28eca00dbadffc29?Signature=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJBcHBJRCI6IjVlNzQ4MmQ2MjE1MjJiZDVjN2Y5YjMzNSIsIl9hcHBJZCI6IjVlNzQ4MmQ2MjE1MjJiZDVjN2Y5YjMzNSIsIl9vcmdhbml6YXRpb25JZCI6IiIsImV4cCI6MTYwNTA1NzgzOSwiaWF0IjoxNjA0NDUzMDM5LCJyZXNvdXJjZSI6Ii9zdG9yYWdlLzExMXozYTY3ZWRkZDg0MjJhMGFjMjhlY2EwMGRiYWRmZmMyOSJ9.EFspR3pA3e4x9i-k5sb7TI0t49F0aNpiUkJFMOjYzeQ)

4.拦截处理

要想过滤属性

需要进行变化日志记录的属性上增加@LogTag注解。凡是没有增加该注解的属性在日志记录时会被自动跳过。

![](https://tcs-devops.aliyuncs.com/storage/111ze8691cee2eaf078fa9167c5c80446d47?Signature=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJBcHBJRCI6IjVlNzQ4MmQ2MjE1MjJiZDVjN2Y5YjMzNSIsIl9hcHBJZCI6IjVlNzQ4MmQ2MjE1MjJiZDVjN2Y5YjMzNSIsIl9vcmdhbml6YXRpb25JZCI6IiIsImV4cCI6MTYwNTA1NzgzOSwiaWF0IjoxNjA0NDUzMDM5LCJyZXNvdXJjZSI6Ii9zdG9yYWdlLzExMXplODY5MWNlZTJlYWYwNzhmYTkxNjdjNWM4MDQ0NmQ0NyJ9.vxDWrlHddehuBufWM_cQV8-rWmz2QTb5PyKvSmpfS0M)

要想属性扩展

声明一个Bean继承BaseExtendedTypeHandler,作为自由扩展的钩子。重写handleAttributeChange方法,可以实现类似于 将id转化为名称等功能

![](https://tcs-devops.aliyuncs.com/storage/111z289a6bc5fdadb17ef34dc77be7d39cf5?Signature=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJBcHBJRCI6IjVlNzQ4MmQ2MjE1MjJiZDVjN2Y5YjMzNSIsIl9hcHBJZCI6IjVlNzQ4MmQ2MjE1MjJiZDVjN2Y5YjMzNSIsIl9vcmdhbml6YXRpb25JZCI6IiIsImV4cCI6MTYwNTA1NzgzOSwiaWF0IjoxNjA0NDUzMDM5LCJyZXNvdXJjZSI6Ii9zdG9yYWdlLzExMXoyODlhNmJjNWZkYWRiMTdlZjM0ZGM3N2JlN2QzOWNmNSJ9.CsXKzQgM7h2sHyzDJyBg2yh2FfuacBRc7icmSQqmn68)
![](https://tcs-devops.aliyuncs.com/storage/111zd43180fa03ff9cc59e5277621de1c182?Signature=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJBcHBJRCI6IjVlNzQ4MmQ2MjE1MjJiZDVjN2Y5YjMzNSIsIl9hcHBJZCI6IjVlNzQ4MmQ2MjE1MjJiZDVjN2Y5YjMzNSIsIl9vcmdhbml6YXRpb25JZCI6IiIsImV4cCI6MTYwNTA1NzgzOSwiaWF0IjoxNjA0NDUzMDM5LCJyZXNvdXJjZSI6Ii9zdG9yYWdlLzExMXpkNDMxODBmYTAzZmY5Y2M1OWU1Mjc3NjIxZGUxYzE4MiJ9.HwpaaTyFY4bCQDy6iDqYmW3gXbQMgJM5TAmgBsSp8b4)

使用规则

对业务数据库进行操作之后才应该有日志记录。所以开发者应注意,在操作业务数据库代码之后才能写入server数据库进行日志记录。

分析适用性

优点:

服务端以jar写好,不需要关心内部实现。可以实现多数据源,以appName以区分。可以对比实体的变化,引入依赖即可使用写入和查询方法。

缺点:服务端没有插件,需要单独开一个服务运行sql文件生成数据库表,不能生成在一个数据库中。需要构造新老实体传写入方法,也就是不手动写入不记录。没有前端需要开发。