SkillAgentSearch skills...

ObjectLogger

A powerful and easy-to-use operational logging system that supports analysis of changes in object properties. 强大且易用的操作日志记录系统,支持对象属性的变化分析。

Install / Use

/learn @yeecode/ObjectLogger
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

<div align="left"> <img src="./pic/ObjectLogger.png" height="80px" alt="ObjectLogger" > </div>

ObjectLogger

language version codebeat badge license

The powerful and easy-to-use object log system, supports writing and querying of object attribute changes.


中文说明


1 Introduction

ObjectLogger is powerful and easy-to-use object log system, which supports writing and querying of object attribute changes.

It can be used in many scenarios, such as user operation log record, object attribute change record and so on.

<div align=center> <img width="90%" src="./pic/react_en.png"/> </div>

The system has the following characteristics:

  • It supports logging and query, and developers only need to redevelop the web page before using.
  • It is not coupled with business systems.Pluggable use, without affecting the main business process.
  • It can be used by multiple business systems at the same time without affecting each other.
  • It can be started directly using the jar package; the business system is supported by the official Maven plug-in.
  • It can automatically parse the attribute changes of objects and support the comparison of rich text.
  • It supports extension of more object attribute types.

The project consists of four parts:

  • ObjectLoggerClient: A jar package that can be integrated into a business system. It can complete the log analysis and transmission of the business system. You can obtain the jar package from Maven repository.
  • ObjectLoggerServer: A web service which needs the support of a database. It can accept log information sent by ObjectLoggerClient and provide log query function.
  • react-object-logger:A React component for displaying log information. This component can be imported from npm repository.
  • ObjectLoggerDemo: An example of business system integration ObjectLoggerClient.

2 Quick Start

2.1 Create Data Tables

Use /server/database/init_data_table.sql to init two data tables.

2.2 Start Server

Download the new target jar file from /server/target/ObjectLoggerServer-*.jar.

Start the jar with the following statement:

java -jar ObjectLoggerServer-*.jar --spring.datasource.driver-class-name={db_driver} --spring.datasource.url=jdbc:{db}://{db_address}/{db_name} --spring.datasource.username={db_username} --spring.datasource.password={db_password}

The above configuration items are described below:

  • db_driver:Database driver. com.mysql.jdbc.Driver for MySQL database; com.microsoft.sqlserver.jdbc.SQLServerDriver for SqlServer database.
  • db:DataBase type. mysql for MySQL database ;sqlserver for SqlServer database.
  • db_address:Database address. If the database is native, 127.0.0.1.
  • db_name:Database name.
  • db_username:User name used to log in to the database.
  • db_password:Password used to log in to the database.

After starting the jar package, you can see:

<div align=center> <img width="80%" src="./pic/server_start.png"/> </div>

The default welcome page is:

http://127.0.0.1:12301/ObjectLoggerServer/

Visit the above address to see the following welcome interface:

<div align=center> <img width="80%" src="./pic/100.jpg"/> </div>

The ObjectLoggerServer system has been built.

3 Access Service System

This section explains how to configure the business system to analyze the object changes in the business system through ObjectLoggerClient and then record them in ObjectLoggerServer.

The use of this part can refer to the ObjectLoggerDemo project, which gives a detailed example of business system integration ObjectLoggerClient. ObjectLoggerDemo's product package can be obtained from /demo/target/ObjectLoggerDemo-*. jar, and the project can be started directly without any other configuration by running java -jar ObjectLoggerDemo-*. jar.

<div align=center> <img width="90%" src="./pic/demo_start.png"/> </div>

3.1 Add Dependency

Add dependency package in POM file:

<dependency>
    <groupId>com.github.yeecode.objectlogger</groupId>
    <artifactId>ObjectLoggerClient</artifactId>
    <version>{last_version}</version>
</dependency>

3.2 Scan Beans in ObjectLoggerClient

3.2.1 SpringBoot

Add @ComponentScan and add com.github.yeecode.objectlogger in basePackages

@SpringBootApplication
@ComponentScan(basePackages={"{your_beans_root}","com.github.yeecode.objectlogger"})
public class MyBootAppApplication {
public static void main(String[] args) {
    // Eliminate other code
  }
}

3.2.2 Spring

Add the following code to applicationContext.xml file:

<context:component-scan base-package="com.github.yeecode.objectlogger">
</context:component-scan>

3.3 Configuration

Add the following code to application.properties:

yeecode.objectLogger.serverAddress=http://{ObjectLoggerServer_address}
yeecode.objectLogger.businessAppName={your_app_name}
yeecode.objectLogger.autoLogAttributes=true
  • ObjectLoggerServer_address: The deployment address of the ObjectLoggerServer in the previous step, such as: 127.0.0.1:12301
  • your_app_name:The application name of the current business system. In order to differentiate log sources and support multiple business systems at the same time
  • yeecode.objectLogger.autoLogAttributes:Whether to automatically record all attributes of an object

At this point, the configuration of the business system is completed.

4 Query Logs

The logs recorded in the system can be queried by http://127.0.0.1:12301/ObjectLoggerServer/log/query, and the logs can be filtered by passing in parameters.

<div align=center> <img width="90%" src="./pic/api.gif"/> </div>

5 Show Logs

react-object-logger is the react plugin for ObjectLogger project to show logs in web. Demo: react-object-logger demo

<div align=center> <img width="90%" src="./pic/react_en.png"/> </div>

More information can be obtained via react-object-logger.

Plugins for other Front-end technology stacks are also under development.

6 Insert Logs

The business system introduces LogClient in any class that requires logging:

@Autowired
private LogClient logClient;

6.1 Simple Use

Just put the zero, one or more attributes of the object into List<BaseAttributeModel> and call logAttributes method. For example, a business application calls:

logClient.logAttributes(
                "CleanRoomTask",
                5,
                "Tom",
                "add",
                "Add New Task",
                "Create a cleanRoomTask",
                "taskName is :Demo Task",
                null);

Query form ObjectLoggerServer:

http://127.0.0.1:12301/ObjectLoggerServer/log/query?appName=ObjectLoggerDemo&objectName=CleanRoomTask&objectId=5

Results:

{
  "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 Automatic Recording of Object Attributes

This function can automatically complete the comparison between old and new objects, and insert multiple attribute changes into the log system together. When used, ensure that the old and new objects belong to the same class.

For example:

CleanRoomTask task = new CleanRoomTask();
task.setId(5);
task.setTaskName("Demo Task");
task.setStatus("TODO");
task.setDescription("Do something...");

CleanRoomTask oldTask = logClient.deepCopy(task);

task.setId(5);
task.setTaskName("Demo Task");
task.setStatus("DOING");
task.setDescription("The main job is to clean the floor.");
task.setAddress("Sunny Street");
task.setRoomNumber(702);

logClient.logObject(
                cleanRoomTask.getId().toString(),
                "Tom",
                "update",
                "Update a Task",
                null,
                null,
                oldTask,
                task);

Query form ObjectLoggerServer:

http://127.0.0.1:12301/ObjectLoggerServer/log/query?appName=ObjectLoggerDemo&objectName=CleanRoomTask&objectId=5

Results:

{
  "respMsg": "SUCCESS",
  "respData": [
    {
      "id": 4,
      "appName": "ObjectLoggerDemo",
      "objectName": "CleanRoomTask",
      "objectId": 5,
      "operator": "Tom",
      "operationName": "update",
      "operationAlias": "Update a Task",
      "extraWords": null,
      "comment": null,
      "operationTime": "2019-07-04T07:22:59.000+0000",
      "attributeModelList": [
        {
          "attributeType": "NORMAL",
          "attributeName": "roomNumber",
          "attributeAlias": "roomNumber",
          "oldValue": "",
          "newValue": "702",
          "diffValue": null,
          "id": 5,
          "operationId": 4
        },
        {
          "attributeType": "NORMAL",
          "attributeName": "address",
          "attributeAlias": "address",
          "oldValue": "",
          "newValue": "Sun
View on GitHub
GitHub Stars627
CategoryCustomer
Updated14d ago
Forks187

Languages

Java

Security Score

100/100

Audited on Mar 20, 2026

No findings