溫馨提示×

Golang日志中如何記錄SQL查詢

小樊
46
2025-07-06 08:04:10
欄目: 云計算

在Golang中,我們通常使用第三方日志庫來記錄日志,例如logrus、zap等。為了記錄SQL查詢,我們可以在執行SQL查詢之前和之后記錄相關信息。以下是一個使用logrus庫記錄SQL查詢的示例:

首先,確保已經安裝了logrus庫:

go get github.com/sirupsen/logrus

然后,創建一個簡單的Go程序,如下所示:

package main

import (
	"database/sql"
	"fmt"
	"github.com/sirupsen/logrus"
	_ "github.com/go-sql-driver/mysql"
)

func main() {
	// 初始化logrus
	logrus.SetFormatter(&logrus.TextFormatter{
		FullTimestamp: true,
	})

	// 連接數據庫
	db, err := sql.Open("mysql", "username:password@tcp(localhost:3306)/dbname")
	if err != nil {
		logrus.Fatal(err)
	}
	defer db.Close()

	// 查詢SQL
	sql := "SELECT * FROM users WHERE age > ?"
	age := 18

	// 記錄SQL查詢
	logrus.WithFields(logrus.Fields{
		"sql": sql,
		"params": []interface{}{age},
	}).Info("Executing SQL query")

	// 執行SQL查詢
	rows, err := db.Query(sql, age)
	if err != nil {
		logrus.WithFields(logrus.Fields{
			"error": err,
		}).Error("Failed to execute SQL query")
		return
	}
	defer rows.Close()

	// 處理查詢結果
	for rows.Next() {
		var id int
		var name string
		var userAge int
		err = rows.Scan(&id, &name, &userAge)
		if err != nil {
			logrus.WithFields(logrus.Fields{
				"error": err,
			}).Error("Failed to scan row")
			continue
		}
		logrus.WithFields(logrus.Fields{
			"id":   id,
			"name": name,
			"age":  userAge,
		}).Info("Row data")
	}

	// 檢查查詢過程中是否有錯誤
	if err = rows.Err(); err != nil {
		logrus.WithFields(logrus.Fields{
			"error": err,
		}).Error("Error occurred during row iteration")
	}
}

在這個示例中,我們使用logrus庫記錄了SQL查詢及其參數。在執行查詢之前,我們使用logrus.WithFields記錄了SQL語句和參數。在執行查詢之后,我們處理查詢結果并記錄每一行的數據。

注意:在實際項目中,為了保護敏感信息,不建議將完整的SQL語句和參數記錄到日志中??梢愿鶕枰涗洸糠中畔⒒蛘呤褂妹撁籼幚?。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女