/gorm-zap

Alternative logging with zap for GORM ⚡️

Primary LanguageGoMIT LicenseMIT

gormzap

Build Status codecov GoDoc license

Alternative logging with zap for GORM ⚡️

In comparison to gorm's default logger, gormzap is faster, reflection free, low allocations and no regex compilations.

Example

package main

import (
	"github.com/jinzhu/gorm"
	"github.com/wantedly/gorm-zap"
)

const (
	databaseURL = "postgres://postgres:@localhost/gormzap?sslmode=disable"
)

func main() {
	logger, err = zap.NewProduction()
	if err != nil {
		panic(err)
	}

	db, err := gorm.Open("postgres", databaseURL)
	if err != nil {
		panic(err)
	}
	db.LogMode(true)
	db.SetLogger(gormzap.New(logger))

	// ...
}

Performance

According to our benchmark, gormzap makes DB operations at least 5% faster and reduce object allocations.

Simple insert query

Logger Time Object Allocated
default 187940 ns/op 494 allocs/op
gormzap 185383 ns/op 475 allocs/op

Simple select query

Logger Time Object Allocated
default 169361 ns/op 531 allocs/op
gormzap 151304 ns/op 519 allocs/op

Simple select query with 10 placeholders

Logger Time Object Allocated
default 200632 ns/op 720 allocs/op
gormzap 190732 ns/op 645 allocs/op

Simple select query with 100 placeholders

Logger Time Object Allocated
default 444513 ns/op 1723 allocs/op
gormzap 263098 ns/op 1101 allocs/op