diff --git a/level_121.go b/level_121.go deleted file mode 100644 index c602bef..0000000 --- a/level_121.go +++ /dev/null @@ -1,15 +0,0 @@ -//go:build go1.21 -// +build go1.21 - -package log - -import "log/slog" - -// fromSlogLevel converts slog.Level to log.Level. -var fromSlogLevel = map[slog.Level]Level{ - slog.LevelDebug: DebugLevel, - slog.LevelInfo: InfoLevel, - slog.LevelWarn: WarnLevel, - slog.LevelError: ErrorLevel, - slog.Level(12): FatalLevel, -} diff --git a/level_no121.go b/level_no121.go deleted file mode 100644 index b505c08..0000000 --- a/level_no121.go +++ /dev/null @@ -1,15 +0,0 @@ -//go:build !go1.21 -// +build !go1.21 - -package log - -import "golang.org/x/exp/slog" - -// fromSlogLevel converts slog.Level to log.Level. -var fromSlogLevel = map[slog.Level]Level{ - slog.LevelDebug: DebugLevel, - slog.LevelInfo: InfoLevel, - slog.LevelWarn: WarnLevel, - slog.LevelError: ErrorLevel, - slog.Level(12): FatalLevel, -} diff --git a/logger_121.go b/logger_121.go index 885b6cf..cd49a09 100644 --- a/logger_121.go +++ b/logger_121.go @@ -14,7 +14,7 @@ import ( // // Implements slog.Handler. func (l *Logger) Enabled(_ context.Context, level slog.Level) bool { - return atomic.LoadInt32(&l.level) <= int32(fromSlogLevel[level]) + return atomic.LoadInt32(&l.level) <= int32(level) } // Handle handles the Record. It will only be called if Enabled returns true. @@ -33,7 +33,7 @@ func (l *Logger) Handle(ctx context.Context, record slog.Record) error { // Get the caller frame using the record's PC. frames := runtime.CallersFrames([]uintptr{record.PC}) frame, _ := frames.Next() - l.handle(fromSlogLevel[record.Level], l.timeFunc(record.Time), []runtime.Frame{frame}, record.Message, fields...) + l.handle(Level(record.Level), l.timeFunc(record.Time), []runtime.Frame{frame}, record.Message, fields...) return nil } diff --git a/logger_121_test.go b/logger_121_test.go index e57f318..d893ebc 100644 --- a/logger_121_test.go +++ b/logger_121_test.go @@ -5,7 +5,9 @@ package log import ( "bytes" + "context" "testing" + "time" "log/slog" @@ -149,3 +151,35 @@ func TestSlogWithGroup(t *testing.T) { }) } } + +func TestSlogCustomLevel(t *testing.T) { + var buf bytes.Buffer + cases := []struct { + name string + expected string + level slog.Level + minLevel Level + }{ + { + name: "custom level not enabled", + expected: "", + level: slog.Level(500), + minLevel: Level(600), + }, + { + name: "custom level enabled", + expected: "foo\n", + level: slog.Level(500), + minLevel: Level(100), + }, + } + for _, c := range cases { + buf.Reset() + t.Run(c.name, func(t *testing.T) { + l := New(&buf) + l.SetLevel(c.minLevel) + l.Handle(context.Background(), slog.NewRecord(time.Now(), c.level, "foo", 0)) + assert.Equal(t, c.expected, buf.String()) + }) + } +} diff --git a/logger_no121.go b/logger_no121.go index aa602d1..bf2eaf9 100644 --- a/logger_no121.go +++ b/logger_no121.go @@ -15,7 +15,7 @@ import ( // // Implements slog.Handler. func (l *Logger) Enabled(_ context.Context, level slog.Level) bool { - return atomic.LoadInt32(&l.level) <= int32(fromSlogLevel[level]) + return atomic.LoadInt32(&l.level) <= int32(level) } // Handle handles the Record. It will only be called if Enabled returns true. @@ -30,7 +30,7 @@ func (l *Logger) Handle(_ context.Context, record slog.Record) error { // Get the caller frame using the record's PC. frames := runtime.CallersFrames([]uintptr{record.PC}) frame, _ := frames.Next() - l.handle(fromSlogLevel[record.Level], l.timeFunc(record.Time), []runtime.Frame{frame}, record.Message, fields...) + l.handle(Level(record.Level), l.timeFunc(record.Time), []runtime.Frame{frame}, record.Message, fields...) return nil }