server: add verbosity level

server: remove filename from log (fix #1)
This commit is contained in:
Simon Vieille 2024-09-01 23:49:08 +02:00
commit 3fd4f19009
3 changed files with 150 additions and 3 deletions

114
logger/logger.go Normal file
View file

@ -0,0 +1,114 @@
package logger
import (
"context"
"errors"
"fmt"
"time"
lg "gorm.io/gorm/logger"
)
type LogLevel int
const (
Silent LogLevel = iota + 1
Error
Warn
Info
)
type logger struct {
lg.Writer
lg.Config
lg.Interface
infoStr, warnStr, errStr string
traceStr, traceErrStr, traceWarnStr string
}
func New(writer lg.Writer, config lg.Config) lg.Interface {
var (
infoStr = "%s\n[info] "
warnStr = "%s\n[warn] "
errStr = "%s\n[error] "
traceStr = "[%.3fms] [rows:%v] %s"
traceWarnStr = "%s\n[%.3fms] [rows:%v] %s"
traceErrStr = "%s\n[%.3fms] [rows:%v] %s"
)
if config.Colorful {
infoStr = lg.Green + "%s\n" + lg.Reset + lg.Green + "[info] " + lg.Reset
warnStr = lg.BlueBold + "%s\n" + lg.Reset + lg.Magenta + "[warn] " + lg.Reset
errStr = lg.Magenta + "%s\n" + lg.Reset + lg.Red + "[error] " + lg.Reset
traceStr = lg.Yellow + "[%.3fms] " + lg.BlueBold + "[rows:%v]" + lg.Reset + " %s"
traceWarnStr = lg.Green + "%s " + lg.Reset + lg.RedBold + "[%.3fms] " + lg.Yellow + "[rows:%v]" + lg.Magenta + " %s" + lg.Reset
traceErrStr = lg.RedBold + "%s " + lg.Reset + lg.Yellow + "[%.3fms] " + lg.BlueBold + "[rows:%v]" + lg.Reset + " %s"
}
return &logger{
Writer: writer,
Config: config,
infoStr: infoStr,
warnStr: warnStr,
errStr: errStr,
traceStr: traceStr,
traceWarnStr: traceWarnStr,
traceErrStr: traceErrStr,
}
}
func (l *logger) LogMode(level lg.LogLevel) lg.Interface {
newlogger := *l
newlogger.LogLevel = level
return &newlogger
}
func (l *logger) Info(ctx context.Context, msg string, data ...interface{}) {
if l.LogLevel >= lg.Info {
l.Printf(l.infoStr+msg, data...)
}
}
func (l *logger) Warn(ctx context.Context, msg string, data ...interface{}) {
if l.LogLevel >= lg.Warn {
l.Printf(l.warnStr+msg, data...)
}
}
func (l *logger) Error(ctx context.Context, msg string, data ...interface{}) {
if l.LogLevel >= lg.Error {
l.Printf(l.errStr+msg, data...)
}
}
func (l *logger) Trace(ctx context.Context, begin time.Time, fc func() (string, int64), err error) {
if l.LogLevel <= lg.Silent {
return
}
elapsed := time.Since(begin)
switch {
case err != nil && l.LogLevel >= lg.Error && (!errors.Is(err, lg.ErrRecordNotFound) || !l.IgnoreRecordNotFoundError):
sql, rows := fc()
if rows == -1 {
l.Printf(l.traceErrStr, err, float64(elapsed.Nanoseconds())/1e6, "-", sql)
} else {
l.Printf(l.traceErrStr, err, float64(elapsed.Nanoseconds())/1e6, rows, sql)
}
case elapsed > l.SlowThreshold && l.SlowThreshold != 0 && l.LogLevel >= lg.Warn:
sql, rows := fc()
slowLog := fmt.Sprintf("SLOW SQL >= %v", l.SlowThreshold)
if rows == -1 {
l.Printf(l.traceWarnStr, slowLog, float64(elapsed.Nanoseconds())/1e6, "-", sql)
} else {
l.Printf(l.traceWarnStr, slowLog, float64(elapsed.Nanoseconds())/1e6, rows, sql)
}
case l.LogLevel == lg.Info:
sql, rows := fc()
if rows == -1 {
l.Printf(l.traceStr, float64(elapsed.Nanoseconds())/1e6, "-", sql)
} else {
l.Printf(l.traceStr, float64(elapsed.Nanoseconds())/1e6, rows, sql)
}
}
}