From dc3597d4f2d34e82cdb87777c09debb0b113bf37 Mon Sep 17 00:00:00 2001 From: Hannes Norda Date: Fri, 3 Oct 2025 13:49:50 +0200 Subject: [PATCH] fix: log arguments are not formatted This fixes a problem with unformatted Sprintf-style strings in the logs. Added tests to verify logs being correctly formatted. --- logger.go | 6 +++--- logger_test.go | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+), 3 deletions(-) create mode 100644 logger_test.go diff --git a/logger.go b/logger.go index e8dad1f3..f7dd4619 100644 --- a/logger.go +++ b/logger.go @@ -35,15 +35,15 @@ func newSlogToRestyAdapter(logger *slog.Logger) *slogToRestyAdapter { } func (l *slogToRestyAdapter) Errorf(format string, v ...interface{}) { - l.logger.Error(format, v...) + l.logger.Error(fmt.Sprintf(format, v...)) } func (l *slogToRestyAdapter) Warnf(format string, v ...interface{}) { - l.logger.Warn(format, v...) + l.logger.Warn(fmt.Sprintf(format, v...)) } func (l *slogToRestyAdapter) Debugf(format string, v ...interface{}) { - l.logger.Debug(format, v...) + l.logger.Debug(fmt.Sprintf(format, v...)) } // slogToLoggerAdapter adapts a slog.Logger to our Logger interface. diff --git a/logger_test.go b/logger_test.go new file mode 100644 index 00000000..2616eb10 --- /dev/null +++ b/logger_test.go @@ -0,0 +1,54 @@ +package flagsmith + +import ( + "bytes" + "log/slog" + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestSlogToRestyAdapter_Errorf(t *testing.T) { + var buf bytes.Buffer + logger := slog.New(slog.NewTextHandler(&buf, &slog.HandlerOptions{ + Level: slog.LevelDebug, + })) + + adapter := newSlogToRestyAdapter(logger) + + adapter.Errorf("test error: %s", "bad") + + output := buf.String() + assert.Contains(t, output, "test error: bad") + assert.Contains(t, output, "level=ERROR") +} + +func TestSlogToRestyAdapter_Warnf(t *testing.T) { + var buf bytes.Buffer + logger := slog.New(slog.NewTextHandler(&buf, &slog.HandlerOptions{ + Level: slog.LevelDebug, + })) + + adapter := newSlogToRestyAdapter(logger) + + adapter.Warnf("test warning: %s: %d", "warn", 42) + + output := buf.String() + assert.Contains(t, output, "test warning: warn: 42") + assert.Contains(t, output, "level=WARN") +} + +func TestSlogToRestyAdapter_Debugf(t *testing.T) { + var buf bytes.Buffer + logger := slog.New(slog.NewTextHandler(&buf, &slog.HandlerOptions{ + Level: slog.LevelDebug, + })) + + adapter := newSlogToRestyAdapter(logger) + + adapter.Debugf("debug info: %s", "details") + + output := buf.String() + assert.Contains(t, output, "debug info: details") + assert.Contains(t, output, "level=DEBUG") +}