Alternative logging with zap for GORM ⚡️
In comparison to gorm's default logger, gormzap
is faster, reflection free, low allocations and no regex compilations.
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))
// ...
}
According to our benchmark, gormzap
makes DB operations at least 5% faster and reduce object allocations.
Logger |
Time |
Object Allocated |
default |
187940 ns/op |
494 allocs/op |
gormzap |
185383 ns/op |
475 allocs/op |
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 |