Documentation
¶
Overview ¶
Package gormlog provides gorm logger implementation using Go-Micro's meta logger.
Example usage:
orm, _ := gorm.Open("postgres", dsn)
orm.LogMode(true)
orm.SetLogger(gormlog.NewGormLogger(gormlog.WithLevel(logger.DebugLevel)))
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func DefaultRecordToFields ¶
DefaultRecordToFields is default encoder func for gormzap log records.
Types ¶
type GormLogger ¶
type GormLogger struct {
// contains filtered or unexported fields
}
Logger is a gorm logger implementation using zap.
func NewGormLogger ¶
func NewGormLogger(logger zerolog.Logger, opts ...GormLoggerOption) *GormLogger
New returns a new gorm logger implemented using zap. By default it logs with debug level.
func (*GormLogger) Print ¶
func (l *GormLogger) Print(values ...interface{})
Print implements gorm's logger interface.
type GormLoggerOption ¶
type GormLoggerOption func(*GormLogger)
LoggerOption is an option for Logger.
func WithLevel ¶
func WithLevel(level zerolog.Level) GormLoggerOption
WithLevel returns Logger option that sets level for gorm logs. It affects only general logs, e.g. those that contain SQL queries. Errors will be logged with error level independently of this option.
func WithRecordToFields ¶
func WithRecordToFields(f RecordToFields) GormLoggerOption
WithRecordToFields returns Logger option that sets RecordToFields func which encodes log Record to a slice of micro logger fields.
This can be used to control field names or field values types.
Example ¶
package main
import (
"os"
"time"
"github.com/rs/zerolog"
"github.com/rs/zerolog/log"
"github.com/xmlking/micro-starter-kit/shared/logger"
"github.com/xmlking/micro-starter-kit/shared/logger/gormlog"
)
func main() {
logger.Init(
logger.WithOutput(os.Stdout),
logger.WithFormat(logger.JSON),
logger.WithTimeFormat("ddd"),
logger.WithLevel(zerolog.DebugLevel),
)
l := gormlog.NewGormLogger(
log.Logger,
gormlog.WithLevel(zerolog.DebugLevel),
gormlog.WithRecordToFields(func(r gormlog.Record) map[string]interface{} {
return map[string]interface{}{
"caller": r.Source,
"duration_ms": float32(r.Duration.Nanoseconds()/1000) / 1000,
"query": r.SQL,
"rows_affected": r.RowsAffected,
}
}),
)
l.Print(
"sql",
"/foo/bar.go",
time.Millisecond*200,
"SELECT * FROM foo WHERE id = ?",
[]interface{}{123},
int64(2),
)
}
Output: {"level":"info","LogLevel":"debug","LogFormat":"json","time":"ddd","message":"Logger set to Zerolog with:"} {"level":"debug","caller":"/foo/bar.go","duration_ms":200,"query":"SELECT * FROM foo WHERE id = 123","rows_affected":2,"time":"ddd","message":"gorm query"}
type Record ¶
type Record struct {
Message string
Source string
Level zerolog.Level
Duration time.Duration
SQL string
RowsAffected int64
}
Record is gormlog log record.
type RecordToFields ¶
RecordToFields func can encode gormlog Record into a slice of zap fields.