GromV1 SQL输出到日志文件

gromV1 debug()方法只能输出到控制台 想记录日志文件

gromv2

import "gorm.io/gorm/logger"
db, err := gorm.Open(mysql.Open(connectionDSN), &gorm.Config{
    Logger: logger.Default.LogMode(logger.Info),
})

V1 可以使用 db.SetLogger() 需要实现函数

type logger interface {
	Print(v ...interface{})
}

自定义日志输出

package main

import (
	"fmt"
	"github.com/jinzhu/gorm"
	_ "github.com/jinzhu/gorm/dialects/mysql"
	log "github.com/sirupsen/logrus"
	"os"
	"time"
)

type GormLogger struct{}

func (*GormLogger) Print(v ...interface{}) {
	switch v[0] {
	case "sql":
		log.WithFields(
			log.Fields{
				"module":        "gorm",
				"type":          "sql",
				"rows_returned": v[5],
				"src":           v[1],
				"values":        v[4],
				"duration":      v[2],
			},
		).Info(v[3])
	case "log":
		log.WithFields(log.Fields{"module": "gorm", "type": "log"}).Print(v[2])
	}
}

func main() {
	var err error
	dataSourceName := "root:@tcp(localhost:3306)/?parseTime=True"
	db, err := gorm.Open("mysql", dataSourceName)
	if err != nil {
		fmt.Println(err)
		panic("failed to connect database")
	}


	db.SetLogger(&GormLogger{})
	db.LogMode(true)
	Formatter := new(log.TextFormatter)
	log.SetFormatter(Formatter)
	Formatter.FullTimestamp = true

	//log.SetOutput(os.Stdout)

	file := time.Now().Format("20060102") + ".txt"
	logFile, err := os.OpenFile(file, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0766)
	if nil != err {
		panic(err)
	}

	log.SetOutput(logFile)
	log.SetReportCaller(true)

	var res []map[string]string
	db.Table("emergency_meeting_user").Where("id=?", 1).Find(&res)
}
posted @ 2022-07-05 19:46  vx_guanchaoguo0  阅读(432)  评论(0编辑  收藏  举报