gormlog

package
v0.3.5 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 14, 2020 License: MIT Imports: 7 Imported by: 0

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

func DefaultRecordToFields(r Record) map[string]interface{}

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

type RecordToFields func(r Record) map[string]interface{}

RecordToFields func can encode gormlog Record into a slice of zap fields.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL