88 "fmt"
99 "log/slog"
1010 "time"
11+
12+ "gorm.io/gorm/utils"
1113)
1214
1315type slogLogger struct {
@@ -37,19 +39,19 @@ func (l *slogLogger) LogMode(level LogLevel) Interface {
3739
3840func (l * slogLogger ) Info (ctx context.Context , msg string , data ... interface {}) {
3941 if l .LogLevel >= Info {
40- l .Logger . InfoContext (ctx , msg , slog .Any ("data" , data ))
42+ l .log (ctx , slog . LevelInfo , msg , slog .Any ("data" , data ))
4143 }
4244}
4345
4446func (l * slogLogger ) Warn (ctx context.Context , msg string , data ... interface {}) {
4547 if l .LogLevel >= Warn {
46- l .Logger . WarnContext (ctx , msg , slog .Any ("data" , data ))
48+ l .log (ctx , slog . LevelWarn , msg , slog .Any ("data" , data ))
4749 }
4850}
4951
5052func (l * slogLogger ) Error (ctx context.Context , msg string , data ... interface {}) {
5153 if l .LogLevel >= Error {
52- l .Logger . ErrorContext (ctx , msg , slog .Any ("data" , data ))
54+ l .log (ctx , slog . LevelError , msg , slog .Any ("data" , data ))
5355 }
5456}
5557
@@ -72,25 +74,39 @@ func (l *slogLogger) Trace(ctx context.Context, begin time.Time, fc func() (sql
7274 switch {
7375 case err != nil && (! l .IgnoreRecordNotFoundError || ! errors .Is (err , ErrRecordNotFound )):
7476 fields = append (fields , slog .String ("error" , err .Error ()))
75- l .Logger . ErrorContext (ctx , "SQL executed" , slog.Attr {
77+ l .log (ctx , slog . LevelError , "SQL executed" , slog.Attr {
7678 Key : "trace" ,
7779 Value : slog .GroupValue (fields ... ),
7880 })
7981
8082 case l .SlowThreshold != 0 && elapsed > l .SlowThreshold :
81- l .Logger . WarnContext (ctx , "SQL executed" , slog.Attr {
83+ l .log (ctx , slog . LevelWarn , "SQL executed" , slog.Attr {
8284 Key : "trace" ,
8385 Value : slog .GroupValue (fields ... ),
8486 })
8587
8688 case l .LogLevel >= Info :
87- l .Logger . InfoContext (ctx , "SQL executed" , slog.Attr {
89+ l .log (ctx , slog . LevelInfo , "SQL executed" , slog.Attr {
8890 Key : "trace" ,
8991 Value : slog .GroupValue (fields ... ),
9092 })
9193 }
9294}
9395
96+ func (l * slogLogger ) log (ctx context.Context , level slog.Level , msg string , args ... any ) {
97+ if ctx == nil {
98+ ctx = context .Background ()
99+ }
100+
101+ if ! l .Logger .Enabled (ctx , level ) {
102+ return
103+ }
104+
105+ r := slog .NewRecord (time .Now (), level , msg , utils .CallerFrame ().PC )
106+ r .Add (args ... )
107+ _ = l .Logger .Handler ().Handle (ctx , r )
108+ }
109+
94110// ParamsFilter filter params
95111func (l * slogLogger ) ParamsFilter (ctx context.Context , sql string , params ... interface {}) (string , []interface {}) {
96112 if l .Parameterized {
0 commit comments