在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語句和參數記錄到日志中??梢愿鶕枰涗洸糠中畔⒒蛘呤褂妹撁籼幚?。