diff --git a/logger/options.go b/logger/options.go index d3bc5daa..d63516e2 100644 --- a/logger/options.go +++ b/logger/options.go @@ -84,7 +84,7 @@ func NewOptions(opts ...Option) Options { } // WithFatalFinalizers set logger.Fatal finalizers -func WithFatalFinalizers(fncs []func(context.Context)) Option { +func WithFatalFinalizers(fncs ...func(context.Context)) Option { return func(o *Options) { o.FatalFinalizers = fncs } diff --git a/logger/slog/slog.go b/logger/slog/slog.go index 0f17a35d..414c605c 100644 --- a/logger/slog/slog.go +++ b/logger/slog/slog.go @@ -229,12 +229,12 @@ func (s *slogLogger) Error(ctx context.Context, msg string, attrs ...interface{} func (s *slogLogger) Fatal(ctx context.Context, msg string, attrs ...interface{}) { s.printLog(ctx, logger.FatalLevel, msg, attrs...) - if closer, ok := s.opts.Out.(io.Closer); ok { - closer.Close() - } for _, fn := range s.opts.FatalFinalizers { fn(ctx) } + if closer, ok := s.opts.Out.(io.Closer); ok { + closer.Close() + } } func (s *slogLogger) Warn(ctx context.Context, msg string, attrs ...interface{}) { diff --git a/logger/slog/slog_test.go b/logger/slog/slog_test.go index 4ba8783a..2888f723 100644 --- a/logger/slog/slog_test.go +++ b/logger/slog/slog_test.go @@ -469,3 +469,25 @@ func Test_WithContextAttrFunc(t *testing.T) { // t.Logf("xxx %s", buf.Bytes()) } + +func TestFatalFinalizers(t *testing.T) { + ctx := context.TODO() + buf := bytes.NewBuffer(nil) + l := NewLogger( + logger.WithLevel(logger.TraceLevel), + logger.WithOutput(buf), + ) + if err := l.Init( + logger.WithFatalFinalizers(func(ctx context.Context) { + l.Info(ctx, "fatal finalizer") + })); err != nil { + t.Fatal(err) + } + l.Fatal(ctx, "info_msg1") + if !bytes.Contains(buf.Bytes(), []byte("fatal finalizer")) { + t.Fatalf("logger dont have fatal message, buf %s", buf.Bytes()) + } + if !bytes.Contains(buf.Bytes(), []byte("info_msg1")) { + t.Fatalf("logger dont have info_msg1 message, buf %s", buf.Bytes()) + } +}