From e2efcaa05dfc840dce269ef5e7113c755eea2421 Mon Sep 17 00:00:00 2001 From: 0xjac Date: Wed, 8 Jan 2025 13:15:49 +0100 Subject: [PATCH] fix(zerologadapter): pass ctx to logger - Pass the context to the logger to be used by hooks. - Update test case with a hook to read value from the context. - Bump zerolog to v.1.30.0 to use `zerolog.Event.Ctx`. --- logadapter/zerologadapter/go.mod | 2 +- logadapter/zerologadapter/go.sum | 8 ++++---- logadapter/zerologadapter/logger.go | 4 ++-- logadapter/zerologadapter/logger_test.go | 19 +++++++++++++++++-- 4 files changed, 24 insertions(+), 9 deletions(-) diff --git a/logadapter/zerologadapter/go.mod b/logadapter/zerologadapter/go.mod index 6d140f9..47f3053 100644 --- a/logadapter/zerologadapter/go.mod +++ b/logadapter/zerologadapter/go.mod @@ -3,7 +3,7 @@ module github.com/simukti/sqldb-logger/logadapter/zerologadapter go 1.17 require ( - github.com/rs/zerolog v1.28.0 + github.com/rs/zerolog v1.30.0 github.com/simukti/sqldb-logger v0.0.0-20230108154142-840120f68bea github.com/stretchr/testify v1.8.1 ) diff --git a/logadapter/zerologadapter/go.sum b/logadapter/zerologadapter/go.sum index f1d70f0..22b02fd 100644 --- a/logadapter/zerologadapter/go.sum +++ b/logadapter/zerologadapter/go.sum @@ -1,4 +1,4 @@ -github.com/coreos/go-systemd/v22 v22.3.3-0.20220203105225-a9a7ef127534/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= +github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= @@ -20,9 +20,9 @@ github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/ github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/rs/xid v1.4.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= -github.com/rs/zerolog v1.28.0 h1:MirSo27VyNi7RJYP3078AA1+Cyzd2GB66qy3aUHvsWY= -github.com/rs/zerolog v1.28.0/go.mod h1:NILgTygv/Uej1ra5XxGf82ZFSLk58MFGAUS2o6usyD0= +github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= +github.com/rs/zerolog v1.30.0 h1:SymVODrcRsaRaSInD9yQtKbtWqwsfoPcRff/oRXLj4c= +github.com/rs/zerolog v1.30.0/go.mod h1:/tk+P47gFdPXq4QYjvCmT5/Gsug2nagsFWBWhAiSi1w= github.com/simukti/sqldb-logger v0.0.0-20230108154142-840120f68bea h1:MygiYxbZHQAGOsZmrIiytjLhPLwww1xcdXzPORrOrLM= github.com/simukti/sqldb-logger v0.0.0-20230108154142-840120f68bea/go.mod h1:ztTX0ctjRZ1wn9OXrzhonvNmv43yjFUXJYJR95JQAJE= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= diff --git a/logadapter/zerologadapter/logger.go b/logadapter/zerologadapter/logger.go index ba33b2e..04849fa 100644 --- a/logadapter/zerologadapter/logger.go +++ b/logadapter/zerologadapter/logger.go @@ -19,7 +19,7 @@ func New(logger zerolog.Logger) sqldblogger.Logger { // Log implement sqldblogger.Logger and log it as is. // To use context.Context values, please copy this file and adjust to your needs. -func (zl *zerologAdapter) Log(_ context.Context, level sqldblogger.Level, msg string, data map[string]interface{}) { +func (zl *zerologAdapter) Log(ctx context.Context, level sqldblogger.Level, msg string, data map[string]interface{}) { var lvl zerolog.Level switch level { @@ -35,5 +35,5 @@ func (zl *zerologAdapter) Log(_ context.Context, level sqldblogger.Level, msg st lvl = zerolog.DebugLevel } - zl.logger.WithLevel(lvl).Fields(data).Msg(msg) + zl.logger.WithLevel(lvl).Ctx(ctx).Fields(data).Msg(msg) } diff --git a/logadapter/zerologadapter/logger_test.go b/logadapter/zerologadapter/logger_test.go index 61b00c4..d551d73 100644 --- a/logadapter/zerologadapter/logger_test.go +++ b/logadapter/zerologadapter/logger_test.go @@ -14,6 +14,8 @@ import ( sqldblogger "github.com/simukti/sqldb-logger" ) +var _ zerolog.Hook = (*Hook)(nil) + type logContent struct { Level string `json:"level"` Time int64 `json:"time"` @@ -21,12 +23,24 @@ type logContent struct { Query string `json:"query"` Args []interface{} `json:"args"` Error string `json:"error"` + CtxValue string `json:"ctxValue"` +} + +type ctxKey struct{} + +type Hook struct{} + +func (h Hook) Run(e *zerolog.Event, _ zerolog.Level, _ string) { + ctx := e.GetCtx() + if value, ok := ctx.Value(ctxKey{}).(string); ok { + e.Str("ctxValue", value) + } } func TestZerologAdapter_Log(t *testing.T) { now := time.Now() wr := &bytes.Buffer{} - lg := New(zerolog.New(wr)) + lg := New(zerolog.New(wr).Hook(Hook{})) lvls := map[sqldblogger.Level]string{ sqldblogger.LevelError: "error", sqldblogger.LevelInfo: "info", @@ -47,7 +61,7 @@ func TestZerologAdapter_Log(t *testing.T) { data["error"] = fmt.Errorf("dummy error").Error() } - lg.Log(context.TODO(), lvl, "query", data) + lg.Log(context.WithValue(context.TODO(), ctxKey{}, "context value"), lvl, "query", data) var content logContent @@ -57,6 +71,7 @@ func TestZerologAdapter_Log(t *testing.T) { assert.True(t, content.Duration > 0) assert.Equal(t, lvlStr, content.Level) assert.Equal(t, "SELECT at.* FROM a_table AS at WHERE a.id = ? LIMIT 1", content.Query) + assert.Equal(t, "context value", content.CtxValue) if lvl == sqldblogger.LevelError { assert.Equal(t, "dummy error", content.Error) }