package pgxslog
import (
)
var _ tracelog.Logger = (*Logger)(nil)
type Logger struct {
handler slog.Handler
timeNow func() time.Time
}
func ( slog.Handler, func() time.Time) *Logger {
return &Logger{
handler: ,
timeNow: ,
}
}
func ( *Logger) (
context.Context,
tracelog.LogLevel,
string,
map[string]any,
) {
:= translateTraceLogLevel()
if !.handler.Enabled(, ) {
return
}
:= make([]slog.Attr, 0, len())
for , := range {
= append(, slog.Any(, ))
}
slices.SortFunc(, func(, slog.Attr) int {
return cmp.Compare(.Key, .Key)
})
var [1]uintptr
runtime.Callers(4, [:])
:= slog.NewRecord(.now(), , , [0])
.AddAttrs(...)
_ = .handler.Handle(, )
}
func ( *Logger) () time.Time {
if .timeNow == nil {
return time.Now()
}
return .timeNow()
}
func ( tracelog.LogLevel) slog.Level {
switch {
case tracelog.LogLevelTrace:
return slog.LevelDebug - 1
case tracelog.LogLevelDebug:
return slog.LevelDebug
case tracelog.LogLevelInfo:
return slog.LevelInfo
case tracelog.LogLevelWarn:
return slog.LevelWarn
case tracelog.LogLevelError:
return slog.LevelError
}
return 0
}