From 181c67a651c8b0807665e644f55ad603cfc52836 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eduardo=20Aguilar=20Y=C3=A9pez?= Date: Wed, 17 Apr 2024 16:13:39 -0600 Subject: [PATCH] feat: add level get an set methods (#29) --- adapters/slog/slog.go | 10 ++++ adapters/slog/slog_test.go | 103 +++++++++++++++++++++++++++++++++++-- 2 files changed, 108 insertions(+), 5 deletions(-) diff --git a/adapters/slog/slog.go b/adapters/slog/slog.go index 90e5c79..ea4cdc4 100644 --- a/adapters/slog/slog.go +++ b/adapters/slog/slog.go @@ -47,6 +47,16 @@ func (a *Adapter) Writer() io.Writer { func (a *Adapter) SetWriter(w io.Writer) { a.writer = w + a.logger = getSlogInstance(a.level, a.writer) +} + +func (a *Adapter) Level() levels.Level { + return a.level +} + +func (a *Adapter) SetLevel(level levels.Level) { + a.level = level + a.logger = getSlogInstance(level, a.writer) } // Logger returns the slog logger instance diff --git a/adapters/slog/slog_test.go b/adapters/slog/slog_test.go index 34099e4..63f7574 100644 --- a/adapters/slog/slog_test.go +++ b/adapters/slog/slog_test.go @@ -15,11 +15,12 @@ import ( ) type testMsg struct { - Level string `json:"level"` - Message string `json:"msg"` - Error string `json:"error"` - Key1 string `json:"key1"` - Key2 int `json:"key2"` + Level string `json:"level"` + Message string `json:"msg"` + Error string `json:"error"` + Key1 string `json:"key1"` + Key2 int `json:"key2"` + Stack []string `json:"stack"` } func TestAdapter_Log(t *testing.T) { @@ -136,6 +137,98 @@ func TestAdapter_Log(t *testing.T) { assert.Equal(t, "", logOutput.String()) }) + + t.Run("should log message with trace", func(t *testing.T) { + var logOutput bytes.Buffer + + logger := New(WithLevel(levels.TraceLevel), WithWriter(&logOutput), WithTrace()) + + logFields := fields.New().SetMap(map[string]any{ + "key1": "value1", + "key2": 42, + }) + + msg := "Test message" + err := errors.New("test error") + + logger.Log(levels.Debug, err, logFields, msg) + + res := testMsg{} + + if errUnmarshall := json.Unmarshal(logOutput.Bytes(), &res); errUnmarshall != nil { + t.Fatal(errUnmarshall) + } + + assert.Equal(t, levels.Debug.String(), strings.ToLower(res.Level)) + assert.Equal(t, msg, res.Message) + assert.Equal(t, logFields.Get("key1"), res.Key1) + assert.Equal(t, logFields.Get("key2"), res.Key2) + assert.Equal(t, err.Error(), res.Error) + assert.NotEmpty(t, res.Stack) + }) + + t.Run("should change level", func(t *testing.T) { + var logOutput bytes.Buffer + + logger := New(WithLevel(levels.Info), WithWriter(&logOutput)) + + logFields := fields.New().SetMap(map[string]any{ + "key1": "value1", + "key2": 42, + }) + + msg := "Test message" + err := errors.New("test error") + + logger.Log(levels.Debug, err, logFields, msg) + + assert.Equal(t, "", logOutput.String()) + + logger.SetLevel(levels.Debug) + + logger.Log(levels.Debug, err, logFields, msg) + + res := testMsg{} + + if errUnmarshall := json.Unmarshal(logOutput.Bytes(), &res); errUnmarshall != nil { + t.Fatal(errUnmarshall) + } + + assert.Equal(t, levels.Debug.String(), strings.ToLower(res.Level)) + assert.Equal(t, msg, res.Message) + assert.Equal(t, logFields.Get("key1"), res.Key1) + assert.Equal(t, logFields.Get("key2"), res.Key2) + assert.Equal(t, err.Error(), res.Error) + }) + + t.Run("should change writer", func(t *testing.T) { + var logOutput bytes.Buffer + + logger := New(WithLevel(levels.Debug), WithWriter(&logOutput)) + + logFields := fields.New().SetMap(map[string]any{ + "key1": "value1", + "key2": 42, + }) + + msg := "Test message" + err := errors.New("test error") + + logger.Log(levels.Debug, err, logFields, msg) + + assert.NotEqual(t, "", logOutput.String()) + + logOutput.Reset() + + var newLogOutput bytes.Buffer + + logger.SetWriter(&newLogOutput) + + logger.Log(levels.Debug, err, logFields, msg) + + assert.NotEqual(t, "", newLogOutput.String()) + assert.Equal(t, "", logOutput.String()) + }) } func TestGetLevels(t *testing.T) {