返回

从"上帝视角"提升开发效率 - 请求与响应参数日志记录框架

后端








## 前言

在实际开发中,如果项目权限管控比较严格,自己又上不去服务器查看日志文件,怎么办?而且日志文件查看也比较繁琐。这时,就需要一个简单的日志记录框架来记录请求参数与响应数据的日志,方便自己排查问题。

## 设计

日志记录框架的设计思想是将请求参数和响应数据记录到数据库中,并提供一个简单的查询界面,以便开发人员可以方便地查询和查看日志信息。

日志记录框架主要包括以下几个部分:

* 日志记录器:负责将请求参数和响应数据记录到数据库中。
* 日志查询器:负责从数据库中查询和显示日志信息。
* 日志查看器:负责显示日志信息。

## 实现

日志记录框架的实现可以分为两个部分:服务端和客户端。

服务端负责接收请求参数和响应数据,并将其记录到数据库中。客户端负责向服务端发送请求,并接收服务端返回的日志信息。

### 服务端

服务端可以使用任何编程语言实现,这里以Java语言为例。

```java
import java.sql.*;
import java.util.*;

public class LogServer {

    private Connection connection;

    public LogServer() {
        try {
            // 加载数据库驱动
            Class.forName("com.mysql.jdbc.Driver");

            // 建立数据库连接
            connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/log", "username", "password");

            // 创建日志表
            Statement statement = connection.createStatement();
            statement.execute("CREATE TABLE IF NOT EXISTS log (id INT PRIMARY KEY AUTO_INCREMENT, request_params TEXT, response_data TEXT, create_time TIMESTAMP)");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void log(Map<String, String> requestParams, String responseData) {
        try {
            // 准备SQL语句
            String sql = "INSERT INTO log (request_params, response_data, create_time) VALUES (?, ?, ?)";
            PreparedStatement statement = connection.prepareStatement(sql);

            // 设置参数
            statement.setString(1, JSON.toJSONString(requestParams));
            statement.setString(2, responseData);
            statement.setTimestamp(3, new Timestamp(new Date().getTime()));

            // 执行SQL语句
            statement.execute();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        LogServer logServer = new LogServer();

        // 模拟一个请求
        Map<String, String> requestParams = new HashMap<>();
        requestParams.put("name", "John Doe");
        requestParams.put("age", "30");

        // 模拟一个响应
        String responseData = "Hello, John Doe!";

        // 记录日志
        logServer.log(requestParams, responseData);
    }
}

客户端

客户端可以使用任何编程语言实现,这里以JavaScript语言为例。

function log(requestParams, responseData) {
    // 将请求参数和响应数据发送到服务端
    fetch("http://localhost:8080/log", {
        method: "POST",
        headers: {
            "Content-Type": "application/json"
        },
        body: JSON.stringify({
            requestParams: requestParams,
            responseData: responseData
        })
    }).then(function(response) {
        // 日志记录成功
    }).catch(function(error) {
        // 日志记录失败
    });
}

使用

日志记录框架的使用非常简单。首先,在需要记录日志的地方调用log()函数,将请求参数和响应数据作为参数传入。然后,打开日志查看器,就可以看到记录的日志信息了。

日志查看器可以使用任何编程语言实现,这里以Python语言为例。

import tkinter as tk

class LogViewer(tk.Frame):

    def __init__(self, master):
        super().__init__(master)
        self.master = master

        # 创建一个文本框用于显示日志信息
        self.text = tk.Text(self)
        self.text.pack()

        # 创建一个按钮用于刷新日志信息
        self.refresh_button = tk.Button(self, text="刷新", command=self.refresh)
        self.refresh_button.pack()

    def refresh(self):
        # 从服务端获取日志信息
        response = requests.get("http://localhost:8080/log")
        logs = response.json()

        # 将日志信息显示在文本框中
        self.text.delete("1.0", "end")
        for log in logs:
            self.text.insert("end", log["request_params"] + "\n")
            self.text.insert("end", log["response_data"] + "\n\n")

# 创建一个主窗口
root = tk.Tk()

# 创建一个日志查看器实例
log_viewer = LogViewer(root)
log_viewer.pack()

# 启动主窗口事件循环
root.mainloop()

总结

请求与响应参数日志记录框架可以帮助开发人员快速定位问题,从而提高开发效率。该框架的设计思想简单,实现也很容易,可以根据自己的需要进行修改和扩展。

希望本文对您有所帮助。如果您有任何问题或建议,请随时与我联系。